QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#640418 | #5070. Check Pattern is Bad | Flamire | TL | 1ms | 3844kb | C++17 | 2.0kb | 2024-10-14 12:10:30 | 2024-10-14 12:10:30 |
Judging History
answer
#include <bits/stdc++.h>
#define pii pair<int,int>
#define s1 first
#define s2 second
using namespace std;
int n,m,t,cc;char s[111][111];bool ok;
int toi(char c){return (c=='W')+2*(c=='?');}
char toc[11]="BW?";
struct oper{int x,y;char c;};
queue<oper> q;
set<pii> st;
void check(int x,int y)
{
int c[3]={0,0,0};
++c[toi(s[x][y])];
++c[toi(s[x][y+1])];
++c[toi(s[x+1][y])];
++c[toi(s[x+1][y+1])];
if(max(c[0],c[1])==4)ok=0;
else if(!c[2])return;
else if(max(c[0],c[1])==3)
{
int ix=0,iy=0;
if(s[x][y]=='?')ix=x,iy=y;
if(s[x+1][y]=='?')ix=x+1,iy=y;
if(s[x][y+1]=='?')ix=x,iy=y+1;
if(s[x+1][y+1]=='?')ix=x+1,iy=y+1;
// printf("check (%d,%d) force (%d,%d)=%c\n",x,y,ix,iy,toc[c[0]==3]);
q.push({ix,iy,toc[c[0]==3]});
}
else return;
}
void proc(int x,int y,char c)
{//printf("proc((%d,%d),%c)\n",x,y,c);
if(s[x][y]!='?')
{
if(s[x][y]!=c)ok=0;
}
else
{
--cc;st.erase({x,y});
s[x][y]=c;
if(x>1&&y>1)check(x-1,y-1);
if(x>1&&y<m)check(x-1,y);
if(x<m&&y>1)check(x,y-1);
if(x<m&&y<m)check(x,y);
}
}
int main()
{
scanf("%d",&t);while(t--)
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)scanf("%s",s[i]+1);cc=0;ok=1;
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)if(s[i][j]!='?'&&(i+j&1))s[i][j]^='B'^'W';
// printf("s:\n");
// for(int i=1;i<=n;++i)printf("%s\n",s[i]+1);
st.clear();
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)if(s[i][j]=='?')st.insert({i,j}),++cc;
while(!q.empty())q.pop();
for(int i=1;i<n;++i)for(int j=1;j<m;++j)check(i,j);
while(cc&&ok)
{
while(!q.empty()&&ok)
{
oper p=q.front();q.pop();
// printf("p:(%d,%d)=%c\n",p.x,p.y,p.c);
proc(p.x,p.y,p.c);
}
if(!ok)break;
if(!st.empty())
{
pii x=*st.begin();st.erase(st.begin());
q.push({x.s1,x.s2,'B'});
}
}
if(!ok)printf("NO\n");
else
{
printf("YES\n");
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
putchar(s[i][j]^(i+j&1)*('B'^'W'));
}
putchar(10);
}
}
}
fclose(stdin);fclose(stdout);return 0;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3844kb
input:
3 2 2 ?? ?? 3 3 BW? W?B ?BW 3 3 BW? W?W ?W?
output:
YES BW WW NO YES BWB WWW BWB
result:
ok ok (3 test cases)
Test #2:
score: -100
Time Limit Exceeded
input:
10000 9 2 BB BW WW WW ?W ?B B? W? BB 6 2 ?? ?B B? BW WW ?? 10 7 WBBBW?? ???BWWW ???BWWB ??WWBW? BBWBBWB WWB?WW? BWBW??? WWWWBBW BBWBB?W B?W?W?B 4 7 ??WBWWB ?BBWWWB ?W?BBB? BBBWBBB 10 1 B W ? B B W W W B ? 10 4 ??WW W?W? WWW? ???W ?W?? ?W?W W?W? ?W?W ???W ???W 8 3 WBW W?? ??? ??? W?W W?W ??? ?W? 4 1 ...