51nod 1658 01交替子序列
先遍历一遍找一遍,如果s[i]和s[i+1]不同的个数是n-1个说明字符串是长度为n的交替子序列
如果是n-2个则说明里面有一个11或者00
78 010101010101010101010101010101101010101010101010101010101010101010101010101010
举个例子从两个11那里后面那个1到最后全部反转就可以把序列变为长度为n的
如果有两个或两个以上的11或者00 则只能多加2个
1100100 4
1101010 6
#include<bits/stdc++.h> #define fp(i,a,b) for(int i=a;i<=b;i++) typedef long long ll; typedef double dl; using namespace std; const int N=2e5+7; const ll M=1e9+7; const int INF=0x3f3f3f3f; int n,m; char s[N]; void solve() { scanf("%d",&n); scanf("%s",s+1); int cnt=1; for(int i=1;i<n;i++) { if(s[i]!=s[i+1]) cnt++; } if(cnt==n-1) cnt=cnt+1; else if(cnt<n-1) { cnt+=2; } //cnt=min(cnt,n); printf("%d",cnt); } int main() { //ios::sync_with_stdio(0); //cin.tie(0),cout.tie(0); //int T; scanf("%d",&T) //for(int i=1;i<=T;i++) solve(); }