【列舉】Broken Necklace
阿新 • • 發佈:2018-12-01
首先一定要先把題意讀懂,讀題時一定要專注仔細。題目讀懂後還是思考,思考好了,條理清晰了,才可以開始碼程式碼。
因為是環所以mencpy(s + n, s, n);然後, 用a表示前一段的連續長度, b表示當前段的連續長度, w表示在當前出現的w的連續數目.
然後還有一個需要注意的就是,如果全是一樣的bead,為了防止結果超過n,我們直接min(n, res);就好了。
/**/ #include <cstdio> #include <cstring> #include <cmath> #include <cctype> #include <iostream> #include <algorithm> #include <map> #include <set> #include <vector> #include <string> #include <stack> #include <queue> typedef long long LL; typedef unsigned long long ULL; using namespace std; char s[700 + 24]; char c = '0'; int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int n, m, res = 0, a = 0, b = 0, w = 0; scanf("%d", &n); m = n << 1; getchar(); scanf("%s", s); memcpy(s + n, s, n); for(int i = 0; i < m; i++) { if(s[i] == 'w') {b++; w++;} else if(s[i] == c) {b++; w = 0;} else { res = max(res, a + b); a = b - w; b = w + 1; w = 0; c = s[i]; } } res = max(res, a + b); printf("%d\n", min(res, n)); return 0; } /**/