我的做法假吗?
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int abs(int w){if(w<0)w=-w;return w;}
int n;int p[114514],q[114514];
queue<int> one,zero;
int niam()
{
one=queue<int>();zero=queue<int>();
cin>>n;
for(int i=1;i<=n;i++){char c;cin>>c;if(c=='1')p[i]=1;if(c=='0')p[i]=0;}
for(int i=1;i<=n;i++){char c;cin>>c;if(c=='1')q[i]=1;if(c=='0')q[i]=0;}
for(int i=1;i<=n;i++)
{
if(p[i]+q[i]==2)one.push(i);
if(p[i]+q[i]==0)zero.push(i);
}
while(!one.empty())
{
int i=one.front();one.pop();
while(!zero.empty() && abs(i-zero.front())!=1)zero.pop();
if(zero.empty())return printf("++\n"),0;
else zero.pop();
}
printf("RP\n");
return 0;
}
int main()
{
int T;cin>>T;while(T--)niam();
}
思路就是,如果一列只有1个红点,默认染色这一列。然后枚举每一个有2个红点的列,在没有红点的列里匹配,如果直到结尾还未匹配则输出++
。
勿喷(包括但不限于UID1****4的某神仙)