标签:
8
ffcfffcffcff
cffcfff
cffcff
cffcf
ffffcffcfff
cffcfffcffffcfffff
cff
cffc
Sample Output
Case #1: 3
Case #2: 2
Case #3: 2
Case #4: -1
Case #5: 2
Case #6: 4
Case #7: 1
Case #8: -1
Hint
Shift the string in the first test case, we will get the string "cffffcfffcff"
and it can be split into "cffff", "cfff" and "cff".
#include <cstdio> #include <queue> #include <cmath> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; const int oo = 1e9; const int N = 1e6+8; const int M = 6000; typedef long long LL; char str[N]; int vis[N]; int main() { int T, ok, i, isc, n, first, xx=1, last; scanf("%d", &T); while(T--) { scanf("%s", str); n = strlen(str); ok = 1; isc = 0; memset(vis, 0, sizeof(vis)); first = last = -1; for(i = 0; i < n; i++) { if(str[i] != ‘f‘ && str[i] != ‘c‘) { ok = 0; break; } if(str[i] == ‘c‘) { vis[i] = 1; last = i; if(isc == 0) first = i; isc ++; } } if(ok == 0) { printf("Case #%d: -1\n", xx++); continue; } if(isc == 0) { printf("Case #%d: %d\n", xx++, (n+1)/2); continue; } if(isc > 0) { if(n-1-last+first < 2) ok = 0; } if(isc > 0 && ok) { for(i = first+1; i <= last; i++) { if(vis[i]) { if(i-first-1 < 2) ok = 0; first = i; } if(ok == 0)break; } } if(ok == 0) printf("Case #%d: -1\n", xx++); else printf("Case #%d: %d\n", xx++, isc); } return 0; }
标签:
原文地址:http://www.cnblogs.com/PersistFaith/p/4821908.html