标签:%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); }
标签:%s name space highlight 思路 code 题意 mod 大小
原文地址:https://www.cnblogs.com/pkgunboat/p/11107460.html