题解:CF2256B Domino Tiles
wangyichen_0711 · · 题解
首先分析题面,不难发现如果第
手玩几组样例,注意到其实答案只有四种取值:
注意:哪怕奇偶性相同处出现了非问号,因为这是合法序列之一,所以答案也为
Code:
#include <bits/stdc++.h>
using namespace std;
int f[200100];bool vis[200100];
int n;
signed main(){
int T;cin>>T;
while(T--){
cin>>n;
memset(f,0,sizeof f);memset(vis,0,sizeof vis);
string s;bool flag=0;cin>>s;s=' '+s;
for(int i=1;i<=n;i++){
if(s[i]!='?'&&!vis[i]){int c=s[i]-'0';c^=1;
for(int j=i+2;j<=n;j+=2,c^=1){
if(s[j]-'0'!=c&&s[j]!='?'){
flag=1;
break;
}else vis[j]=1;
}if(flag)break;
}
}
if(flag){puts("0");continue;}
int ans1=1,ans2=1;
for(int i=1;i<=n;i+=2){if(s[i]!='?'){ans1=0;break;}}
for(int i=2;i<=n;i+=2){if(s[i]!='?'){ans2=0;break;}}
cout<<max(ans1*2+ans2*2,1)<<endl;
}
return 0-0;
}
/*
手写的样例加强版
5
7
1?????1
2
??
5
0?1??
5
0?0??
8
00110011
ans: 0 4 2 0 1
*/