codeforces603A

sol:

手玩之后发现,一个00(11)可以使答案+1

一个000(111)可以使答案+2

两个00(11)可以使答案+2

三个00(11)还是+2

 

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
    ll s=0; bool f=0; char ch=' ';
    while(!isdigit(ch))    {f|=(ch=='-'); ch=getchar();}
    while(isdigit(ch)) {s=(s<<3)+(s<<1)+(ch^48); ch=getchar();}
    return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
    if(x<0) {putchar('-'); x=-x;}
    if(x<10) {putchar(x+'0'); return;}
    write(x/10); putchar((x%10)+'0');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const ll N=100005;
ll n,a[N];
char s[N];
int main()
{
    ll i,lwj=1,wwx=1,cnt=0,oo=1;
    n=read();
    scanf("%s",s+1);
    for(i=1;i<=n;i++) a[i]=s[i]-'0';
    for(i=2;i<=n;i++)
    {
        if(a[i]!=a[i-1])
        {
            oo=1;
            lwj++;
        }
        else
        {
            oo++;
            wwx=max(wwx,oo);
            cnt+=wwx-1;
        }
    }
    if(cnt==0) Wl(lwj);
    else if(cnt==1) Wl(lwj+1);
    else Wl(lwj+2);
    return 0;
}
View Code

 

posted @ 2021-10-10 21:50  yccdu  阅读(27)  评论(0编辑  收藏  举报