QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#422625#8090. GurdurrAfterlife#WA 725ms36196kbC++202.8kb2024-05-27 17:39:292024-05-27 17:39:30

Judging History

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

  • [2024-05-27 17:39:30]
  • 评测
  • 测评结果:WA
  • 用时:725ms
  • 内存:36196kb
  • [2024-05-27 17:39:29]
  • 提交

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->4]
                                m[sg[a][0][j][s & ((1 << j) - 1)] ^ sg[0][b][i - j - 1][ (s & ((1 << i) - (1 << j+1))) >> j+1]] = 1;
                                /// [3->2]
                                m[sg[a][b][i][s ^ (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] += 0;
            lst[2]++;
        }
        else {
            lst[3] += (1 << lst[2]) ;
            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: 721ms
memory: 36060kb

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: 710ms
memory: 36100kb

input:

1
3
II.
.II
III

output:

Second

result:

ok single line: 'Second'

Test #3:

score: -100
Wrong Answer
time: 725ms
memory: 36196kb

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
Second
First
Second
Second
Second
First
Second
First
First
Second
First
First
Second
First
First
First
First
Second
First
Seco...

result:

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