码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 353E 贪心

时间:2019-06-29 19:21:41      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:%s   name   space   highlight   思路   code   题意   mod   大小   

题意:给你一张有向图,第i条边连接i号点和(i + 1) % n号点,问最多可以选择多少个点,使得这些点互相不可达。

思路:容易发现,如果某个边的集合点的数目大于等于2,那么就可以选出一个点,当然也可以出现多个1条边的集合相邻的情况(假设有m个),那么可以选择m / 2条边。

代码:

#include <bits/stdc++.h>
#define LL long long
#define INF 0x3f3f3f3f
#define db double
#define pii pair<int, int>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 1000010;
char s[maxn];
int main() {
	int ans = 0;
	scanf("%s", s);
	int n = strlen(s);
	for (int i = 0; i < n; i++) {
		if(s[i] != s[(i + 1) % n]) {
			if(s[i] != s[(i + 2) % n]) ans++;//下一个集合边数大于等于2,直接选择 
			else if(s[i] != s[(i + 3) % n]) {//出现了两个连续大小为1的集合,直接选择 
				i++, ans++;
			}
		}
	}
	printf("%d\n", ans);
}

  

Codeforces 353E 贪心

标签:%s   name   space   highlight   思路   code   题意   mod   大小   

原文地址:https://www.cnblogs.com/pkgunboat/p/11107460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!