QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#273202#5070. Check Pattern is Badsio_WA 241ms3676kbC++144.4kb2023-12-02 22:01:252023-12-02 22:01:26

Judging History

你现在查看的是最新测评结果

  • [2023-12-02 22:01:26]
  • 评测
  • 测评结果:WA
  • 用时:241ms
  • 内存:3676kb
  • [2023-12-02 22:01:25]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast,no-stack-protector,fast-math",3)
int t,n,m,k;
char a[105][105],tmp[105][105];
struct node{int x,y;};
vector<node> v;
char p[2]={'B','W'};
int dx[8]={0,0,1,1,1,-1,-1,-1};
int dy[8]={1,-1,0,1,-1,0,1,-1};
void output()
{
    // if(t==10000) return ;
    cout<<"YES\n";
    for(int i=1;i<=n;i++,cout<<"\n")
        for(int j=1;j<=m;j++) cout<<tmp[i][j];
}
queue<node> q;
char check(int x,int y)
{
    char ans1='?',ans2='?',ans3='?',ans4='?';
    // cout<<"xsa";
    // cout<<ans1<<" "<<ans2<<" "<<ans3<<" "<<ans4<<"\n";
    if(x>1&&y>1&&tmp[x-1][y-1]=='B'&&tmp[x-1][y]=='W'&&tmp[x][y-1]=='W') ans1='B';
    else if(x>1&&y>1&&tmp[x-1][y-1]=='W'&&tmp[x-1][y]=='B'&&tmp[x][y-1]=='B') ans1='W';
    else ans1='?';
    if(x>1&&y<m&&tmp[x-1][y]=='B'&&tmp[x-1][y+1]=='W'&&tmp[x][y+1]=='B') ans2='W';
    else if(x>1&&y<m&&tmp[x-1][y]=='W'&&tmp[x-1][y+1]=='B'&&tmp[x][y+1]=='W') ans2='B';
    else ans2='?';
    if(x<n&&y>1&&tmp[x][y-1]=='B'&&tmp[x+1][y-1]=='W'&&tmp[x+1][y]=='B') ans3='W';
    else if(x>1&&y<m&&tmp[x][y-1]=='W'&&tmp[x+1][y-1]=='B'&&tmp[x+1][y]=='W') ans3='B';
    else ans3='?';
    if(x<n&&y<m&&tmp[x+1][y+1]=='B'&&tmp[x+1][y]=='W'&&tmp[x][y+1]=='W') ans4='B';
    else if(x<n&&y<m&&tmp[x+1][y+1]=='W'&&tmp[x+1][y]=='B'&&tmp[x][y+1]=='B') ans4='W';
    else ans4='?';
    if(ans1=='?'&&ans2=='?'&&ans3=='?'&&ans4=='?') return '?';
    else if(ans1!='B'&&ans2!='B'&&ans3!='B'&&ans4!='B') return 'B';
    else if(ans1!='W'&&ans2!='W'&&ans3!='W'&&ans4!='W') return 'W';
    else return '!';
}
bool cmp(node a,node b){return a.x+a.y<b.x+b.y;}
int main()
{
    // freopen("a.in","r",stdin);
    // freopen("a.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    srand(time(0));
    cin>>t;
    for(int l=1;l<=t;l++)
    {
        v.clear();
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                cin>>a[i][j];
                if(a[i][j]=='?') v.push_back({i,j});
            }
        for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) tmp[i][j]=a[i][j];
        int flag=0;
        for(int i=0;i<v.size();i++)
        {
            if(check(v[i].x,v[i].y)!='?'&&check(v[i].x,v[i].y)!='!') tmp[v[i].x][v[i].y]=check(v[i].x,v[i].y);
            else continue;
        }
        random_shuffle(v.begin(),v.end());
        for(int c=1;c<=300&&flag==0;c++)
        {
            for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) tmp[i][j]=a[i][j];
            for(int i=0;i<v.size();i++)
            {
                if(tmp[v[i].x][v[i].y]!='?') continue;
                int f=0;
                char ans=check(v[i].x,v[i].y);
                if(ans=='!'){tmp[v[i].x][v[i].y]='B';break;}
                if(ans=='?') tmp[v[i].x][v[i].y]=p[rand()%2];
                else tmp[v[i].x][v[i].y]=ans;
            }
            for(int i=(int)v.size()-1;i>0;i--)
            {
                if(tmp[v[i].x][v[i].y]!='?') continue;
                int f=0;
                char ans=check(v[i].x,v[i].y);
                if(ans=='!'){tmp[v[i].x][v[i].y]='B';break;}
                if(ans=='?') tmp[v[i].x][v[i].y]=p[rand()%2];
                else tmp[v[i].x][v[i].y]=ans;
            }
            int f=0;
            for(int i=1;i<n;i++)
                for(int j=1;j<m;j++)
                    if(tmp[i][j]==tmp[i+1][j+1]&&tmp[i][j+1]==tmp[i+1][j]&&tmp[i][j]!=tmp[i][j+1]) f=1;
            // for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(f==0&&tmp[i][j]=='?')
            // {
            //     f=1;
            //     cout<<n<<" "<<m<<"\n";
            //     for(int i=1;i<=n;i++,cout<<"\n") for(int j=1;j<=m;j++) cout<<a[i][j];
            //     for(int i=1;i<=n;i++,cout<<"\n") for(int j=1;j<=m;j++) cout<<tmp[i][j];
            //     for(int i=0;i<v.size();i++) cout<<'('<<v[i].x<<","<<v[i].y<<")"<<" ";
            //     cout<<"\n";
            //     cout<<check(i,j)<<"\n";
            //     for(int i=1;i<=n;i++,cout<<"\n") for(int j=1;j<=m;j++) cout<<tmp[i][j];
            // }
            if(f==1) continue;
            flag=1;
            output();
            break;
        }
        if(flag==0) cout<<"NO\n";
    }
}
/*
5
2 6
??????
W???B?
2 6
??????
W???B?
2 6
??????
W???B?
5 10
?WW????W??
BW?W???WBW
BW??WB????
???W??????
?W????B???
5 10
?WW????W??
BW?W???WBW
BW??WB????
???W??????
?W????B???
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3676kb

input:

3
2 2
??
??
3 3
BW?
W?B
?BW
3 3
BW?
W?W
?W?

output:

YES
WB
BB
NO
YES
BWB
WWW
WWW

result:

ok ok (3 test cases)

Test #2:

score: 0
Accepted
time: 241ms
memory: 3652kb

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
...

output:

YES
BB
BW
WW
WW
BW
BB
BB
WB
BB
YES
BW
BB
BW
BW
WW
WW
NO
NO
YES
B
W
W
B
B
W
W
W
B
B
YES
BBWW
WWWB
WWWB
WBWW
WWWW
BWBW
WWWW
BWBW
BBBW
WBBW
YES
WBW
WWW
BWW
WWB
WWW
WWW
WWW
BWW
YES
W
B
W
B
YES
BBBB
WWBB
YES
BBBBBB
WBWWWB
YES
WWWBB
YES
BWBWWB
WWBBBB
BBBWBW
WWWWBW
YES
B
YES
BWB
BBB
WBW
BBB
WWB
BBB
BWW
WWB...

result:

ok ok (10000 test cases)

Test #3:

score: -100
Wrong Answer
time: 232ms
memory: 3648kb

input:

10000
9 6
?B?W?W
WWBBWB
?WB?BW
B?W?W?
WW??W?
B???BW
?W?WW?
W?B?B?
?W?BB?
10 1
W
?
?
?
?
?
?
?
B
W
9 4
????
????
W???
?W?B
??WW
?BW?
WW?W
??W?
??W?
3 2
?W
?B
BB
2 7
?W?BWWB
??W???W
9 9
?BW?WWW?W
BW?WBBWWW
W?W????WW
W??WW??WW
W?BWB?B?W
??BB?WWWW
W???WBW?W
WWW???WWW
B?WWWWWW?
8 10
W??BWWW??B
?BWBWBW?BW...

output:

NO
YES
W
W
W
B
W
W
B
W
B
W
YES
BBWW
WWWB
WBWW
WWWB
BBWW
WBWW
WWWW
WWWW
WWWW
YES
BW
BB
BB
YES
WWWBWWB
BBWBBWW
NO
NO
YES
WWB
BWB
BBB
BBW
WWW
YES
WWWWWWWBB
WBBBBWBBW
WBWBBBBBW
WWWWWWWWW
BWWWBWWWW
BWBWWWBWW
WWBWBBBWB
YES
WBWBBWB
WBBBWWW
WWWWWWW
BBWWWBB
WBWBWWB
WWWBWBB
WWWWWWW
WWWWBWB
BWWBBWW
YES
WW
BB
W...

result:

wrong answer ans finds the answer, but out doesn't (test case 4429)