QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#488075#8905. Ультра mexPorNPtree0 210ms4608kbC++171.9kb2024-07-23 16:02:072024-07-23 16:02:09

Judging History

This is the latest submission verdict.

  • [2024-07-23 16:02:09]
  • Judged
  • Verdict: 0
  • Time: 210ms
  • Memory: 4608kb
  • [2024-07-23 16:02:07]
  • Submitted

answer

#include <bits/stdc++.h>

using namespace std;

const int N = 11;

int P, fac[(1 << N) + 5], iFac[(1 << N) + 5], f[N + 1][N + 1][1 << N], g[N + 1][N + 1][1 << N];

int C(int x, int y) {
    return 1ll * fac[x] * iFac[y] % P * iFac[x - y] % P;
}

void preCalc() {
    for (int i = fac[0] = iFac[0] = 1; i <= (1 << N); ++i) {
        fac[i] = 1ll * fac[i - 1] * i % P;
        iFac[i] = (i == 1 ? 1 : 1ll * (P - P / i) * iFac[P % i] % P);
    }
    for (int i = 1; i <= (1 << N); ++i) {
        iFac[i] = 1ll * iFac[i - 1] * iFac[i] % P;
    }
    for (int o = 0; o <= N; ++o) {
        if (o != N) {
            for (int i = 0; i <= (1 << o) - 1 - (!!o); ++i) {
                f[o][o + 1][i + (1 << o)] = g[o][o + 1][i + (1 << o)] = C((1 << o) - 1 - (!!o), i);
            }
        }
        for (int i = o + 1; i <= N; ++i) {
            for (int j = (1 << o); j < (1 << (i - 1)); ++j) {
                for (int k = 0; k <= (1 << (i - 1)); ++k) {
                    f[o][i][j + k] = (f[o][i][j + k] + 1ll * f[o][i - 1][j] * C((1 << (i - 1)), k)) % P;
                    if (k != (1 << (i - 1))) g[o][i][j + k] = (g[o][i][j + k] + 1ll * f[o][i - 1][j] * C((1 << (i - 1)) - 1, k)) % P;
                }
            }
            for (int j = 1; j < (1 << (i - 1)); ++j) {
                f[o][i][j + (1 << (i - 1))] = (0ll + f[o][i][j + (1 << (i - 1))] + f[o][i - 1][j] + g[o][i - 1][j]) % P;
                g[o][i][j + (1 << (i - 1))] = (g[o][i][j + (1 << (i - 1))] + g[o][i - 1][j]) % P;
            }
        }
    }
}

signed main() {
    scanf("%d", &P);
    preCalc();
    int T; scanf("%d", &T);
    while (T--) {
        int k, n, p; scanf("%d%d%d", &k, &n, &p);
        int z = 0;
        while ((1 << z) < p) ++z;
        if ((1 << z) != p) {
            puts("0");
            continue;
        }
        printf("%d\n", f[z][k][n]);
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 210ms
memory: 4608kb

input:

118751233
10
1 2 2
1 2 1
1 2 2
1 2 2
1 2 2
1 1 1
1 1 2
1 1 1
1 1 1
1 1 2

output:

0
0
0
0
0
1
0
1
1
0

result:

wrong answer 1st numbers differ - expected: '1', found: '0'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Skipped

Dependency #1:

0%

Subtask #4:

score: 0
Skipped

Dependency #1:

0%

Subtask #5:

score: 0
Skipped

Dependency #1:

0%

Subtask #6:

score: 0
Skipped

Dependency #1:

0%

Subtask #7:

score: 0
Skipped

Dependency #1:

0%

Subtask #8:

score: 0
Skipped

Dependency #1:

0%

Subtask #9:

score: 0
Skipped

Dependency #1:

0%

Subtask #10:

score: 0
Skipped

Dependency #1:

0%

Subtask #11:

score: 0
Skipped

Dependency #1:

0%

Subtask #12:

score: 0
Skipped

Dependency #1:

0%

Subtask #13:

score: 0
Skipped

Dependency #1:

0%

Subtask #14:

score: 0
Skipped

Dependency #1:

0%

Subtask #15:

score: 0
Skipped

Dependency #1:

0%

Subtask #16:

score: 0
Skipped

Dependency #1:

0%

Subtask #17:

score: 0
Skipped

Dependency #1:

0%

Subtask #18:

score: 0
Skipped

Dependency #1:

0%

Subtask #19:

score: 0
Skipped

Dependency #1:

0%

Subtask #20:

score: 0
Skipped

Dependency #1:

0%

Subtask #21:

score: 0
Skipped

Dependency #1:

0%

Subtask #22:

score: 0
Skipped

Dependency #1:

0%

Subtask #23:

score: 0
Skipped

Dependency #1:

0%

Subtask #24:

score: 0
Skipped

Dependency #1:

0%

Subtask #25:

score: 0
Skipped

Dependency #1:

0%

Subtask #26:

score: 0
Skipped

Dependency #1:

0%

Subtask #27:

score: 0
Skipped

Dependency #1:

0%

Subtask #28:

score: 0
Skipped

Dependency #1:

0%

Subtask #29:

score: 0
Skipped

Dependency #1:

0%

Subtask #30:

score: 0
Skipped

Dependency #1:

0%