新的一周>_<
---12.14
补之前的一场 cf
cf 604c
http://codeforces.com/contest/604/problem/C
给一串长度为 n 的 01串,可以翻转一个区间,问能够得到的最长的01序列是多长(可以不连续)
没有想出来,,,
其实可以发现,翻转一个区间,能够给原串带来2个贡献,所以算出原来的最长的加上 2 和 n 取最小值就好了
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 8 const int maxn = 1e5+5; 9 char s[maxn]; 10 int n; 11 12 void solve(){ 13 int c = 0; 14 for(int i = 1;i <= n;){ 15 c++; 16 int j = i; 17 while(j <= n && s[i] == s[j]) j++; 18 i = j; 19 } 20 int ans = 0; 21 ans = min(c+2,n); 22 printf("%d\n",ans); 23 } 24 25 int main(){ 26 while(scanf("%d",&n) != EOF){ 27 scanf("%s",s+1); 28 solve(); 29 } 30 return 0; 31 }
时间: 2024-11-07 08:48:48