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();
}
全部评论
这个可以证明为什么最多是这么多吗
点赞 回复 分享
发布于 2021-11-05 21:20

相关推荐

10-22 19:18
上海大学 后端
jopajhhdjwnqk:水印都叠杀人书了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务