QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#297393 | #5070. Check Pattern is Bad | zzuqy | WA | 0ms | 3524kb | C++14 | 2.7kb | 2024-01-04 13:13:17 | 2024-01-04 13:13:18 |
Judging History
answer
#include<bits/stdc++.h>
#define N 109
using namespace std;
int n,m;
int a[N][N];
int check(int x,int y){
if(x<1||y<1||x>=n||y>=m)return 0;
if(a[x][y]==a[x+1][y+1]&&a[x+1][y]==a[x][y+1]&&a[x][y]+a[x][y+1]==1)return -1;
if((a[x][y]==a[x+1][y+1]||a[x+1][y]==a[x][y+1])&&(a[x][y]+a[x][y+1]==1||a[x+1][y]+a[x+1][y+1]==1))return 2;
if(a[x][y]==a[x+1][y+1]||a[x+1][y]==a[x][y+1])return 1;
return 0;
}
queue<pair<int,int>>q2,q1,q0;
bool paint(int x,int y,int clr){
if(a[x][y]<=1)return 1;
a[x][y]=clr;
for(int tx=x-1;tx<=x;tx++)
for(int ty=y-1;ty<=y;ty++){
int tmp=check(x,y);
if(tmp==-1)return 0;
if(tmp==2)q2.push(make_pair(tx,ty));
if(tmp==1)q1.push(make_pair(tx,ty));
}
return 1;
}
bool solve(int testcase){
cin>>n>>m;
while(!q2.empty())q2.pop();
while(!q1.empty())q1.pop();
while(!q0.empty())q0.pop();
for(int i=1;i<=n;i++){
string s;cin>>s;
for(int j=1;j<=m;j++){
if(s[j-1]=='B')a[i][j]=0;
if(s[j-1]=='W')a[i][j]=1;
if(s[j-1]=='?')a[i][j]=i*N+j,q0.push(make_pair(i,j));
}
}
if(testcase==107){
cout<<n<<" "<<m<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==0)putchar('B');
else if(a[i][j]==1)putchar('W');
else putchar('?');
}
}
}
for(int i=1;i<n;i++){
for(int j=1;j<m;j++){
int tmp=check(i,j);
if(tmp==-1)return 0;
if(tmp==2)q2.push(make_pair(i,j));
if(tmp==1)q1.push(make_pair(i,j));
}
}
while(!q2.empty()||!q1.empty()||!q0.empty()){
if(!q2.empty()){
auto tmp=q2.front();q2.pop();
int x=tmp.first,y=tmp.second;
if(check(x,y)==-1)return 0;
if(a[x][y]>=2)if(paint(x,y,a[x+1][y])==0)return 0;
if(a[x+1][y]>=2)if(paint(x+1,y,a[x][y])==0)return 0;
if(a[x][y+1]>=2)if(paint(x,y+1,a[x+1][y+1])==0)return 0;
if(a[x+1][y+1]>=2)if(paint(x+1,y+1,a[x][y+1])==0)return 0;
}
else if(!q1.empty()){
auto tmp=q1.front();q1.pop();
int x=tmp.first,y=tmp.second;
if(check(x,y)==-1)return 0;
if(rand()%2){
if(a[x][y]>=2)if(paint(x,y,a[x+1][y])==0)return 0;
if(a[x+1][y]>=2)if(paint(x+1,y,a[x][y])==0)return 0;
}
else{
if(a[x][y+1]>=2)if(paint(x,y+1,a[x+1][y+1])==0)return 0;
if(a[x+1][y+1]>=2)if(paint(x+1,y+1,a[x][y+1])==0)return 0;
}
}
else{
auto tmp=q0.front();q0.pop();
int x=tmp.first,y=tmp.second;
if(check(x,y)==-1)return 0;
if(paint(x,y,0)==0)return 0;
}
}
return 1;
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
int t;cin>>t;
for(int testcase=1;testcase<=t;testcase++){
solve(testcase);
/*
if(solve()==0)puts("NO");
else{
puts("YES");
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)putchar("BW"[a[i][j]]);putchar('\n');
}
}*/
}
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3524kb
input:
3 2 2 ?? ?? 3 3 BW? W?B ?BW 3 3 BW? W?W ?W?
output:
result:
wrong output format Unexpected end of file - token expected (test case 1)