QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#422617#8090. GurdurrAfterlife#WA 726ms36136kbC++203.5kb2024-05-27 17:32:042024-05-27 17:32:05

Judging History

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

  • [2024-05-27 17:32:05]
  • 评测
  • 测评结果:WA
  • 用时:726ms
  • 内存:36136kb
  • [2024-05-27 17:32:04]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
int n , m;
vector<int> sg[2][2][21];

void init() {
    
    for(int i = 0;i <= 20;i++) {
        for(int a = 0;a < 2;a++) { /// [0允许,1不允许]
            for(int b = 0;b < 2;b++) {
                sg[a][b][i].resize(1 << i) ;
                vector<int> m(4);
                for(int s = 0 ; s < (1<<i) ;s++) {
                    if(i == 0) sg[a][b][i][s] = 0;
                    else {
                        m[0] = m[1] = m[2] = m[3] = 0;
                        for(int j = 0;j < i;j++) {
                            if((s >> j) & 1) {
                                //// 3
                                //// [3->4]
                                // printf("in %d : %d %d : %d\n",j , s&((1 << j) - 1) , (s & ((1 << i) - (1 << j+1))) >> j+1 , sg[0][b][i - j - 1][ (s & ((1 << i) - (1 << j+1))) >> j+1]);
                                m[sg[a][0][j][s & ((1 << j) - 1)] ^ sg[0][b][i - j - 1][ (s & ((1 << i) - (1 << j+1))) >> j+1]] = 1;
                                
                                // printf("in %d : %d %d : %d\n",j , s^(1<<j) , sg[a][b][j][s ^ ()]

                                //// [3->2]
                                m[sg[a][b][i][s ^ (1 << j)]] = 1;
                                //// [3->1]
                                // if(!((j == 0 && a == 1) || (j == i - 1 && b == 1))) {
                                //     m.push_back(sg[a][1][j][s & ((1 << j) - 1)] ^ sg[1][b][i - j - 1][s & ((1 << i) - (1 << j+1))]);
                                // }
                            }
                            else {
                                //// 2
                                //// [2->1]
                                if(!((j == 0 && a == 1) || (j == i - 1 && b == 1))) {
                                    m[sg[a][1][j][s & ((1 << j) - 1)] ^ sg[1][b][i - j - 1][(s & ((1 << i) - (1 << j+1))) >> j+1]] = 1;
                                }
                            }
                            // printf("ok %d\n",j);
                        }
                        
                        for(int p = 0;p <= 3;p++) {
                            if(!m[p]) {sg[a][b][i][s] = p ; break ;}
                        }
                        // printf("OK %d %d %d %d : %d\n",a,b,i,s , sg[a][b][i][s]);
                    }
                }
            }

        }
        // printf("OK %d\n",i);
    }
}
void solv() {
    int n ; cin >> n;
    vector<array<int,4> > sub;
    array<int,4> lst = {0,0,0,0};
    for(int i = 1;i <= n;i++) {
        string s;cin >> s;
        if(s == "I.I") { /// 4
            if(lst[2]) {
                sub.push_back(lst) ; lst = {0,0,0,0};
            }
        }
        else if(s == ".I.") { ///1
            lst[1] = 1 ;
            sub.push_back(lst) ; lst = {0,0,0,0} ;
            lst[0] = 1;
        }
        else if(s == "II." || s == ".II") { ///2
            lst[3] = (lst[3] << 1) ;
            lst[2]++;
        }
        else {
            lst[3] = (lst[3] << 1) | 1;
            lst[2]++;
        }
    }
    if(lst[2]) sub.push_back(lst);
    int a = 0;
    for(auto &x : sub) {
        // printf("%d %d %d %d\n",x[0],x[1],x[2],x[3]);
        a ^= sg[x[0]][x[1]][x[2]][x[3]];
    }
    if(a) cout << "First\n";
    else cout << "Second\n";
}
int main() {
    ios::sync_with_stdio(false) ; cin.tie(0) ; cout.tie(0) ;
    init() ;
    int t;cin >> t;
    while(t--) solv() ;
}

详细

Test #1:

score: 100
Accepted
time: 726ms
memory: 36052kb

input:

5
1
III
1
I.I
1
.I.
1
.II
2
III
III

output:

First
Second
Second
First
First

result:

ok 5 lines

Test #2:

score: 0
Accepted
time: 718ms
memory: 36088kb

input:

1
3
II.
.II
III

output:

Second

result:

ok single line: 'Second'

Test #3:

score: -100
Wrong Answer
time: 718ms
memory: 36136kb

input:

292
4
III
II.
III
.I.
2
III
I.I
1
.I.
1
I.I
2
III
III
3
I.I
.I.
III
3
II.
III
I.I
4
III
III
III
III
2
.II
.I.
4
.I.
.II
III
.I.
4
I.I
.I.
I.I
III
4
III
.I.
II.
.I.
4
III
I.I
III
I.I
3
III
III
III
4
III
I.I
II.
.II
2
.I.
III
4
III
I.I
.I.
I.I
3
.II
.II
I.I
3
.I.
I.I
I.I
4
I.I
III
I.I
III
1
III
4
.I.
...

output:

First
First
Second
Second
First
First
Second
Second
Second
First
First
First
Second
First
First
First
First
First
Second
Second
First
Second
Second
First
First
Second
Second
First
First
Second
Second
Second
First
Second
First
First
Second
First
First
First
First
First
First
First
Second
First
Second...

result:

wrong answer 28th lines differ - expected: 'Second', found: 'First'