UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#214548#2486. 小根堆KXG60307ms24036kbC++111.8kb2024-11-19 22:35:432024-11-19 23:04:37

answer

#include <cstdio>
#include <vector>
using namespace std;
const long long mod = 998244353;
long long n, x, y;
long long inv[1000010], invfac[1000010], fac[1000010];
long long f[1000010], g[1010][1010], siz[1000010];
long long C(long long n, long long m) {
    return fac[n] * invfac[m] % mod * invfac[n - m] % mod;
}
bool dfs(int u) {
    if (u > n) {
        siz[u] = 0;
        f[u] = 1;
        return false;
    }
    bool lson = dfs(2 * u);
    bool rson = dfs(2 * u + 1);
    siz[u] = 1 + siz[2 * u] + siz[2 * u + 1];
    if (lson || rson) {
        if (lson) {
            for (int j = 2; j <= siz[u]; j++) {
                for (int k = 1; k <= siz[2 * u]; k++) {
                    g[u][j] = (g[u][j] + f[2 * u + 1] * g[2 * u][k] % mod * C(j - 2, k - 1) % mod * C(siz[u] - j, siz[2 * u] - k) % mod) % mod;
                }
            }
        } else {
            for (int j = 2; j <= siz[u]; j++) {
                for (int k = 1; k <= siz[2 * u + 1]; k++) {
                    g[u][j] = (g[u][j] + f[2 * u] * g[2 * u + 1][k] % mod * C(j - 2, k - 1) % mod * C(siz[u] - j, siz[2 * u + 1] - k) % mod) % mod;
                }
            }
        }
        return true;
    } else if (u == x) {
        g[u][1] = C(siz[u] - 1, siz[2 * u]) * f[2 * u] % mod * f[2 * u + 1] % mod;
        return true;
    } else {
        f[u] = C(siz[u] - 1, siz[2 * u]) * f[2 * u] % mod * f[2 * u + 1] % mod;
        return false;
    }
}
int main() {
    inv[1] = 1;
    invfac[0] = invfac[1] = 1;
    fac[0] = fac[1] = 1;
    for (int i = 2; i <= 1000000; i++) {
        inv[i] = (mod - mod / i) * inv[mod % i] % mod;
        invfac[i] = invfac[i - 1] * inv[i] % mod;
        fac[i] = fac[i - 1] * i % mod;
    }
    scanf("%lld%lld%lld", &n, &x, &y);
    dfs(1);
    printf("%lld\n", g[1][y]);
    return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 44ms
memory: 23960kb

input:

5 2 2

output:

6

result:

ok single line: '6'

Test #2:

score: 10
Accepted
time: 34ms
memory: 23972kb

input:

10 4 3

output:

840

result:

ok single line: '840'

Test #3:

score: 10
Accepted
time: 31ms
memory: 23980kb

input:

20 18 19

output:

134772704

result:

ok single line: '134772704'

Test #4:

score: 10
Accepted
time: 34ms
memory: 23976kb

input:

30 20 16

output:

862828891

result:

ok single line: '862828891'

Test #5:

score: 10
Accepted
time: 40ms
memory: 23964kb

input:

50 1 1

output:

454716180

result:

ok single line: '454716180'

Test #6:

score: 10
Accepted
time: 33ms
memory: 23988kb

input:

1000 1 1

output:

517631465

result:

ok single line: '517631465'

Test #7:

score: 0
Wrong Answer
time: 43ms
memory: 24036kb

input:

1000 765 669

output:

80878816

result:

wrong answer 1st lines differ - expected: '582857574', found: '80878816'

Test #8:

score: 0
Wrong Answer
time: 48ms
memory: 24028kb

input:

1000 149 293

output:

272412140

result:

wrong answer 1st lines differ - expected: '25668476', found: '272412140'

Test #9:

score: 0
Runtime Error

input:

100000 42608 7968

output:


result:


Test #10:

score: 0
Runtime Error

input:

1000000 921152 658527

output:


result: