Codeforces Round #732 (Div. 1) B
B. AquaMoon and Chess
简单计数
观察样例 我们发现如果是 00111100
这样是11是随便可以放置在任何地方
但是要是011100这样的 就会有个单独的1出来
我们显然可以这样 011 100 我们左边的11可以在左边随便移动左边的0是l个
01 1100 右边的11也可以在右边随便移动右边的0是r个
显然我这一坨可以忽略这个1 这样方案数是不变的
但是我们会想到另一种情况 就是 11010 这样会越过这个1
->01110->01011 我们会发现忽略这个1也是可以的
所以我们的ans就是C(n+m,n)
n是11的数量 m是0的数量
void solve(){
int n;cin>>n;
string s;cin>>s;s=')'+s;
int len=0,cnt=0,res=0;//res个11 cnt个0
for(int i=1;i<=n;i++){
if(s[i]=='0'){
cnt++;
res+=len/2;
len=0;
}else{
len++;
}
}
res+=len/2;
cout<<C(res+cnt,cnt)%mod<<endl;
}