QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#427285#8748. 简单博弈PorNPtree#WA 1969ms130812kbC++176.7kb2024-06-01 11:57:192024-06-01 11:57:20

Judging History

This is the latest submission verdict.

  • [2024-06-01 11:57:20]
  • Judged
  • Verdict: WA
  • Time: 1969ms
  • Memory: 130812kb
  • [2024-06-01 11:57:19]
  • Submitted

answer

#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")

using namespace std;

const int N = 505;

int M[15];

int f1[2][8][N][N];
const int g1[2][4] = {{1, 1, 1, 0}, {0, 0, 0, 0}};

int f2[4][4][N][N];
const int g2[3][3] = {{1, 1, 0}, {1, 0, 0}, {0, 0, 0}};

int f3[4][8][N][N];
const int g3[3][4] = {{1, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 0}};

int f4[8][8][N][N];
const int g4[4][4] = {{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 0}};

signed main() {
    for (int x = 1; ~x; --x) {
        for (int y = 7; ~y; --y) {
            for (int n = 0; n <= 500; ++n) {
                for (int m = 0; m <= 500; ++m) {
                    memset(M, 0, sizeof(M));
                    for (int i = -1; i <= 1; ++i) {
                        for (int j = -1; j <= 3; ++j) {
                            if ((i == 1 ? !n : (i != -1 ? ((x >> i) & 1) : 0))) continue;
                            if ((j == 3 ? !m : (j != -1 ? ((y >> j) & 1) : 0))) continue;
                            int hv = 0;
                            if (~i) {
                                for (int k = 0; k <= 3 && !hv; ++k) hv |= (k == 3 ? m : !((y >> k) & 1)) && !g1[i][k];
                            }
                            if (~j) {
                                for (int k = 0; k <= 1 && !hv; ++k) hv |= (k == 1 ? n : !((x >> k) & 1)) && !g1[k][j];
                            }
                            if (!hv) continue;
                            int tx = (i == -1 || i == 1 ? x : x ^ (1 << i)), ty = (j == -1 || j == 3 ? y : y ^ (1 << j));
                            int tn = (i == 1 ? n - 1 : n), tm = (j == 3 ? m - 1 : m);
                            M[f1[tx][ty][tn][tm]] = 1;
                        }
                    }
                    while (M[f1[x][y][n][m]]) ++f1[x][y][n][m];
                }
            }
        }
    }
    for (int x = 3; ~x; --x) {
        for (int y = 3; ~y; --y) {
            for (int n = 0; n <= 500; ++n) {
                for (int m = 0; m <= 500; ++m) {
                    memset(M, 0, sizeof(M));
                    for (int i = -1; i <= 2; ++i) {
                        for (int j = -1; j <= 2; ++j) {
                            if ((i == 2 ? !n : (i != -1 ? ((x >> i) & 1) : 0))) continue;
                            if ((j == 2 ? !m : (j != -1 ? ((y >> j) & 1) : 0))) continue;
                            int hv = 0;
                            if (~i) {
                                for (int k = 0; k <= 2 && !hv; ++k) hv |= (k == 2 ? m : !((y >> k) & 1)) && !g2[i][k];
                            }
                            if (~j) {
                                for (int k = 0; k <= 2 && !hv; ++k) hv |= (k == 2 ? n : !((x >> k) & 1)) && !g2[k][j];
                            }
                            if (!hv) continue;
                            int tx = (i == -1 || i == 2 ? x : x ^ (1 << i)), ty = (j == -1 || j == 2 ? y : y ^ (1 << j));
                            int tn = (i == 2 ? n - 1 : n), tm = (j == 2 ? m - 1 : m);
                            M[f2[tx][ty][tn][tm]] = 1;
                        }
                    }
                    while (M[f2[x][y][n][m]]) ++f2[x][y][n][m];
                }
            }
        }
    }
    for (int x = 3; ~x; --x) {
        for (int y = 7; ~y; --y) {
            for (int n = 0; n <= 500; ++n) {
                for (int m = 0; m <= 500; ++m) {
                    memset(M, 0, sizeof(M));
                    for (int i = -1; i <= 2; ++i) {
                        for (int j = -1; j <= 3; ++j) {
                            if ((i == 2 ? !n : (i != -1 ? ((x >> i) & 1) : 0))) continue;
                            if ((j == 3 ? !m : (j != -1 ? ((y >> j) & 1) : 0))) continue;
                            int hv = 0;
                            if (~i) {
                                for (int k = 0; k <= 3 && !hv; ++k) hv |= (k == 3 ? m : !((y >> k) & 1)) && !g3[i][k];
                            }
                            if (~j) {
                                for (int k = 0; k <= 2 && !hv; ++k) hv |= (k == 2 ? n : !((x >> k) & 1)) && !g3[k][j];
                            }
                            if (!hv) continue;
                            int tx = (i == -1 || i == 2 ? x : x ^ (1 << i)), ty = (j == -1 || j == 3 ? y : y ^ (1 << j));
                            int tn = (i == 2 ? n - 1 : n), tm = (j == 3 ? m - 1 : m);
                            M[f3[tx][ty][tn][tm]] = 1;
                        }
                    }
                    while (M[f3[x][y][n][m]]) ++f3[x][y][n][m];
                }
            }
        }
    }
    for (int x = 7; ~x; --x) {
        for (int y = 7; ~y; --y) {
            for (int n = 0; n <= 500; ++n) {
                for (int m = 0; m <= 500; ++m) {
                    memset(M, 0, sizeof(M));
                    for (int i = -1; i <= 3; ++i) {
                        for (int j = -1; j <= 3; ++j) {
                            if ((i == 3 ? !n : (i != -1 ? ((x >> i) & 1) : 0))) continue;
                            if ((j == 3 ? !m : (j != -1 ? ((y >> j) & 1) : 0))) continue;
                            int hv = 0;
                            if (~i) {
                                for (int k = 0; k <= 3 && !hv; ++k) hv |= (k == 3 ? m : !((y >> k) & 1)) && !g4[i][k];
                            }
                            if (~j) {
                                for (int k = 0; k <= 3 && !hv; ++k) hv |= (k == 3 ? n : !((x >> k) & 1)) && !g4[k][j];
                            }
                            if (!hv) continue;
                            int tx = (i == -1 || i == 3 ? x : x ^ (1 << i)), ty = (j == -1 || j == 3 ? y : y ^ (1 << j));
                            int tn = (i == 3 ? n - 1 : n), tm = (j == 3 ? m - 1 : m);
                            M[f4[tx][ty][tn][tm]] = 1;
                        }
                    }
                    while (M[f4[x][y][n][m]]) ++f4[x][y][n][m];
                }
            }
        }
    }
    int T; scanf("%d", &T);
    int t = 0;
    while (T--) {
        int n, m; scanf("%d%d", &n, &m);
        int a, b, c, d, e, f;
        scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f);
        if (a == c && c == e) {
            t ^= f1[0][0][n - 1][m - 3];
        } else if (b == d && d == f) {
            t ^= f1[0][0][n - 3][m - 1];
        } else if ((a == c || a == e || c == e) && (b == d || b == f || d == f)) {
            t ^= f2[0][0][n - 2][m - 2];
        } else if (a == c || a == e || c == e) {
            t ^= f3[0][0][n - 2][m - 3];
        } else if (b == d || d == f ||b == f) {
            t ^= f3[0][0][n - 3][m - 2];
        } else {
            t ^= f4[0][0][n - 3][m - 3];
        }
    }
    if (t) puts("OvO"); else puts("QAQ");
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1969ms
memory: 130616kb

input:

100000
215 4
6 1
59 1
71 4
1 482
1 311
1 381
1 26
3 428
3 81
2 359
1 310
222 220
108 40
16 2
11 79
4 223
4 73
4 103
3 51
214 442
174 261
186 418
202 379
146 464
61 193
85 102
117 206
3 1
3 1
2 1
1 1
357 356
199 222
97 15
257 15
30 2
28 2
4 1
12 2
308 308
32 110
56 157
234 171
347 346
243 89
166 140
...

output:

OvO

result:

ok single line: 'OvO'

Test #2:

score: -100
Wrong Answer
time: 1891ms
memory: 130812kb

input:

100000
494 303
141 173
343 269
451 163
4 370
4 46
1 100
3 135
226 3
21 3
116 1
47 3
77 52
65 27
19 4
69 50
205 235
164 101
106 183
27 16
4 2
3 2
1 2
4 2
364 364
54 50
155 83
21 181
432 434
295 302
332 91
258 264
324 326
136 171
239 155
300 81
1 4
1 3
1 2
1 4
177 435
20 326
170 256
175 179
1 4
1 3
1 ...

output:

OvO

result:

wrong answer 1st lines differ - expected: 'QAQ', found: 'OvO'