CodeForce刷题表
Day11
题意:
字符串有a、b、c三种字符:
- a的绝对数量大于b
- a的绝对数量大于c
- 最少有两个字符
- 可以删除字符串前面和后面任意连续的字符
问最短的满足条件的串有多长?
思路:
其实只有有限的情况:
aa aba aca abca acba abbacca accabba
只有上面的7种情况,其他的情况可能包含有上面的情况。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6+5; const ll mod = 1e9+7; int main(){ int _;cin>>_; while(_--) { string s,ss; int len; cin>>len; cin>>s; int res = -1; for(int i=0;i<len-6;i++) { ss = s.substr(i,7); if(ss=="abbacca"||ss=="accabba") res = 7; } for(int i=0;i<len-3;i++) { ss = s.substr(i,4); if(ss=="abca"||ss=="acba") res = 4; } for(int i=0;i<len-2;i++) { ss = s.substr(i,3); if(ss=="aba"||ss=="aca") res = 3; } for(int i=0;i<len-1;i++) { ss = s.substr(i,2); if(ss=="aa") res = 2; } cout<<res<<endl; } return 0; }
|
总结:
试着手写一下情况,说不定只有有限个情况。