QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#127850#6644. Red Black GridParadoxWA 20ms5596kbC++204.3kb2023-07-20 09:53:112023-07-20 09:53:13

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-20 09:53:13]
  • 评测
  • 测评结果:WA
  • 用时:20ms
  • 内存:5596kb
  • [2023-07-20 09:53:11]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
#define Yes cout<<"YES\n"
#define No  cout<<"NO\n"
#define pb push_back
#define endl '\n'
int n,m,k;
const int N=1e3+10;
int a[N][N],vis[N][N];
int num;
void init(){
    int tmp=1;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            a[i][j]=tmp;
            if(tmp) num++;
            tmp^=1;
            if(a[i][j]){
                if(i==1 || i==n){
                    if(j-1 && n-j) vis[i][j]=3;
                }
                else if(j==1 || j==n){
                    if(i-1 && n-i) vis[i][j]=3;
                }
                else vis[i][j]=4;
            }
        }
        if(n&1);
        else tmp^=1;
    }
    vis[1][1]=vis[1][n]=vis[n][1]=vis[n][n]=2;
    // for(int i=1;i<=n;i++){
    //             for(int j=1;j<=n;j++) cout<<(a[i][j]?"R ":"B ");cout<<endl;}
}
bool solve () {
    cin>>n>>k;
    int tmp=2*(n-1)*n;
    if (k==1 || k==tmp-1){
        cout<<"Impossible\n";
        return 0;
    }
    if(k==0){
        cout<<"Possible\n";
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cout<<"R";
            }
            cout<<"\n";
        }
        return 0;
    }
    if(n==3){
        cout<<"Possible\n";
        if (k == 0) cout<<"RRR\nRRR\nRRR\n";
        else if (k == 2) cout<<"BRR\nRRR\nRRR\n";
        else if (k == 3) cout<<"RBR\nRRR\nRRR\n";
        else if (k == 4) cout<<"RRR\nRBR\nRRR\n";
        else if (k == 5) cout<<"BRR\nRRB\nRRR\n";
        else if (k == 6) cout<<"RRR\nBRB\nRRR\n";
        else if (k == 7) cout<<"RRR\nBRB\nRBB\n";
        else if (k == 8) cout<<"RBR\nBBB\nRBR\n";
        else if (k == 9) cout<<"RRR\nBRB\nRBR\n";
        else if (k == 10) cout<<"BBR\nBRB\nRBR\n";
        else if (k == 12) cout<<"RBR\nBRB\nRBR\n";
        return 0;
    }
    init();
    if(k==tmp) return 1;
    bool flag=0;
    int x=tmp-k;
    // cout<<tmp<<" "<<x<<endl;
    const int n2=4/((n&1)?1:2);
    int n3;if(n&1){n3=4*((n+1)/2-2);}else{n3=4*(n/2-1);}
    const int n4=num-n2-n3;
    // cout<<n2<<" "<<n3<<" "<<n4<<endl;
    int c4=x/4,c3,c2,c1;
    // cout<<c4<<"__\n";
    if(c4<=n4){
        int t=x%4;
        // cout<<t<<endl;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++)
                if(vis[i][j]==4)
                        if(c4){a[i][j]^=1;c4--;}
        }
        if(t==3) a[1][3]^=1;
        else if(t==2) a[1][1]^=1;
        else if(t==1){
            a[1][3]^=1;a[1][1]^=1;
            a[2][2]^=1;
        }
        return 1;
    }
    else{
        c3=(x-n4*4)/3;
        // cout<<c3<<"==\n";
        if(c3<=n3){
            int t=(x-n4*4)%3;
            // cout<<"____"<<t<<endl;
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++)
                    if(vis[i][j]==4) a[i][j]^=1;
                    else{
                        if(vis[i][j]==3){
                            if(c3){a[i][j]^=1;c3--;}
                        }
                    }
            }
            if(t==2) a[1][1]^=1;
            else if(t==1){
                a[n][n]^=1;
                a[1][1]^=1;
                a[1][3]^=1;
            }
        }
        else{
            c2=(x-4*n4-3*n3)/2;
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++)
                if(vis[i][j]>=3) a[i][j]^=1;
                else{
                    if(vis[i][j]==2){
                        if(c2){a[i][j]^=1;c2--;}
                    }
                }
            }
            int t=(x-n4*4-n3*3)%2;
            if(t==1){
                if(n&1){
                    a[1][3]^=1;
                    a[1][1]^=1;a[1][n]^=1;
                }
                else{
                    a[1][1]^=1;
                    a[n][n]^=1;
                    a[1][3]^=1;
                }
            }
        }
        return 1;
    }

}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T;
    cin>>T; while (T--){
        if(solve()){
            cout<<"Possible\n";
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++) cout<<(a[i][j]?"R":"B");cout<<endl;}
        } 
        // else cout<<"Impossible\n";
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3476kb

input:

2
3 6
3 1

output:

Possible
RRR
BRB
RRR
Impossible

result:

ok correct! (2 test cases)

Test #2:

score: -100
Wrong Answer
time: 20ms
memory: 5596kb

input:

4424
1 0
2 4
2 3
2 2
2 1
2 0
3 12
3 11
3 10
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
3 1
3 0
4 24
4 23
4 22
4 21
4 20
4 19
4 18
4 17
4 16
4 15
4 14
4 13
4 12
4 11
4 10
4 9
4 8
4 7
4 6
4 5
4 4
4 3
4 2
4 1
4 0
5 40
5 39
5 38
5 37
5 36
5 35
5 34
5 33
5 32
5 31
5 30
5 29
5 28
5 27
5 26
5 25
5 24
5 23
5 22
5 21
5...

output:

Possible
R
Possible
RB
BR
Impossible
Possible
BB
BR
Impossible
Possible
RR
RR
Possible
RBR
BRB
RBR
Impossible
Possible
BBR
BRB
RBR
Possible
RRR
BRB
RBR
Possible
RBR
BBB
RBR
Possible
RRR
BRB
RBB
Possible
RRR
BRB
RRR
Possible
BRR
RRB
RRR
Possible
RRR
RBR
RRR
Possible
RBR
RRR
RRR
Possible
BRR
RRR
RRR
I...

result:

wrong answer Condition failed: "getNum(vec) == k" (test case 32)