QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#370026 | #7774. 基础寄术练习题 | wsyear | 100 ✓ | 157ms | 14284kb | C++14 | 2.1kb | 2024-03-28 21:12:48 | 2024-03-28 21:13:46 |
Judging History
answer
#include <bits/stdc++.h>
#define rep(i, j, k) for (int i = (j); i <= (k); ++i)
#define per(i, j, k) for (int i = (j); i >= (k); --i)
#define SZ(v) int((v).size())
#define ALL(v) (v).begin(),(v).end()
#define fi first
#define se second
using ll = long long;
using pii = std::pair<int, int>;
using pll = std::pair<ll, ll>;
template<class T> void chkmn(T &x, T y) { if (y < x) x = y; }
template<class T> void chkmx(T &x, T y) { if (y > x) x = y; }
using namespace std;
const int maxn = 110;
int n, m, k, mod, f[maxn][maxn], g[2][maxn][maxn * maxn][2], inv[maxn * maxn];
inline void add(int &x, int y) { x += y; if (x >= mod) x -= mod; }
inline void sub(int &x, int y) { x -= y; if (x < 0) x += mod; }
inline int Add(int x, int y) { x += y; if (x >= mod) x -= mod; return x; }
inline int Sub(int x, int y) { x -= y; if (x < 0) x += mod; return x; }
inline int fpw(int a, int p) {
int res = 1;
while (p) {
if (p & 1) res = 1ll * res * a % mod;
a = 1ll * a * a % mod, p >>= 1;
}
return res;
}
int main() {
cin.tie(nullptr) -> ios::sync_with_stdio(false);
cin >> n >> m >> k >> mod;
rep (i, 1, m * (m + 1) / 2) inv[i] = fpw(i, mod - 2);
if (k == 1) {
f[0][0] = 1;
rep (i, 1, m) rep (j, 0, n) {
add(f[i][j], f[i - 1][j]);
if (j) add(f[i][j], 1ll * f[i - 1][j - 1] * inv[i] % mod);
}
cout << f[m][n] << '\n';
} else {
g[0][0][0][0] = 1;
rep (i, 1, m) {
rep (j, 0, m) rep (k, 0, m * (m + 1) / 2) rep (p, 0, 1) g[i & 1][j][k][p] = 0;
rep (j, 0, m) rep (k, 0, m * (m + 1) / 2) rep (p, 0, 1) {
if (!g[(i & 1) ^ 1][j][k][p]) continue;
add(g[i & 1][j][k][p], g[(i & 1) ^ 1][j][k][p]); // 不放入 S
add(g[i & 1][j + 1][k][p], 1ll * g[(i & 1) ^ 1][j][k][p] * inv[i] % mod); // 放入 S,不放入 T
sub(g[i & 1][j + 1][k + i][p], 1ll * g[(i & 1) ^ 1][j][k][p] * inv[i] % mod); // 放入 T
if (!p) add(g[i & 1][j + 1][k + i][1], 1ll * g[(i & 1) ^ 1][j][k][p] * i % mod); // a1
}
}
int ans = 0;
rep (i, 1, m * (m + 1) / 2) add(ans, 1ll * g[m & 1][n][i][1] * inv[i] % mod);
cout << ans << '\n';
}
}
详细
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 0ms
memory: 3708kb
input:
9 16 1 327134593
output:
162102742
result:
ok single line: '162102742'
Test #2:
score: 0
Accepted
time: 1ms
memory: 3620kb
input:
11 18 1 834359503
output:
256188485
result:
ok single line: '256188485'
Test #3:
score: 0
Accepted
time: 1ms
memory: 3720kb
input:
18 18 1 614802701
output:
552168146
result:
ok single line: '552168146'
Test #4:
score: 0
Accepted
time: 2ms
memory: 7796kb
input:
7 16 2 861918403
output:
306693876
result:
ok single line: '306693876'
Test #5:
score: 0
Accepted
time: 0ms
memory: 7812kb
input:
11 17 2 617904383
output:
393900291
result:
ok single line: '393900291'
Subtask #2:
score: 25
Accepted
Test #6:
score: 25
Accepted
time: 0ms
memory: 3668kb
input:
60 98 1 715015339
output:
690737273
result:
ok single line: '690737273'
Test #7:
score: 0
Accepted
time: 2ms
memory: 3764kb
input:
96 97 1 507892589
output:
481151247
result:
ok single line: '481151247'
Test #8:
score: 0
Accepted
time: 0ms
memory: 3684kb
input:
90 95 1 621080027
output:
255353202
result:
ok single line: '255353202'
Test #9:
score: 0
Accepted
time: 1ms
memory: 3672kb
input:
85 94 1 297115421
output:
122254364
result:
ok single line: '122254364'
Test #10:
score: 0
Accepted
time: 0ms
memory: 3664kb
input:
81 91 1 460412027
output:
148037986
result:
ok single line: '148037986'
Subtask #3:
score: 15
Accepted
Test #11:
score: 15
Accepted
time: 3ms
memory: 9984kb
input:
29 29 2 545875273
output:
171843225
result:
ok single line: '171843225'
Test #12:
score: 0
Accepted
time: 3ms
memory: 7928kb
input:
29 29 2 342070607
output:
291380196
result:
ok single line: '291380196'
Test #13:
score: 0
Accepted
time: 3ms
memory: 8032kb
input:
30 30 2 293965439
output:
148471965
result:
ok single line: '148471965'
Test #14:
score: 0
Accepted
time: 3ms
memory: 7984kb
input:
30 30 2 528219961
output:
203632962
result:
ok single line: '203632962'
Test #15:
score: 0
Accepted
time: 1ms
memory: 3672kb
input:
30 30 1 202836509
output:
158493990
result:
ok single line: '158493990'
Subtask #4:
score: 10
Accepted
Test #16:
score: 10
Accepted
time: 3ms
memory: 10028kb
input:
27 30 2 360712453
output:
80987914
result:
ok single line: '80987914'
Test #17:
score: 0
Accepted
time: 3ms
memory: 7924kb
input:
26 29 2 377615957
output:
278812897
result:
ok single line: '278812897'
Test #18:
score: 0
Accepted
time: 0ms
memory: 9988kb
input:
22 30 2 163686233
output:
19517828
result:
ok single line: '19517828'
Test #19:
score: 0
Accepted
time: 0ms
memory: 7936kb
input:
20 29 2 785657729
output:
713061509
result:
ok single line: '713061509'
Test #20:
score: 0
Accepted
time: 1ms
memory: 3620kb
input:
24 29 1 374090597
output:
312615700
result:
ok single line: '312615700'
Subtask #5:
score: 15
Accepted
Test #21:
score: 15
Accepted
time: 3ms
memory: 10084kb
input:
29 38 2 909155077
output:
745973305
result:
ok single line: '745973305'
Test #22:
score: 0
Accepted
time: 6ms
memory: 10224kb
input:
40 40 2 1067474879
output:
995503334
result:
ok single line: '995503334'
Test #23:
score: 0
Accepted
time: 5ms
memory: 8112kb
input:
32 37 2 751116719
output:
699924081
result:
ok single line: '699924081'
Test #24:
score: 0
Accepted
time: 2ms
memory: 8104kb
input:
33 37 2 496100951
output:
21741458
result:
ok single line: '21741458'
Test #25:
score: 0
Accepted
time: 1ms
memory: 3632kb
input:
34 38 1 499914887
output:
386116226
result:
ok single line: '386116226'
Subtask #6:
score: 10
Accepted
Test #26:
score: 10
Accepted
time: 31ms
memory: 8148kb
input:
57 66 2 767174999
output:
315351738
result:
ok single line: '315351738'
Test #27:
score: 0
Accepted
time: 41ms
memory: 8436kb
input:
52 69 2 399947623
output:
237685494
result:
ok single line: '237685494'
Test #28:
score: 0
Accepted
time: 31ms
memory: 8204kb
input:
63 64 2 903693961
output:
520250635
result:
ok single line: '520250635'
Test #29:
score: 0
Accepted
time: 40ms
memory: 8808kb
input:
65 70 2 268454909
output:
255864893
result:
ok single line: '255864893'
Test #30:
score: 0
Accepted
time: 1ms
memory: 3712kb
input:
58 68 1 562105223
output:
175445185
result:
ok single line: '175445185'
Subtask #7:
score: 15
Accepted
Test #31:
score: 15
Accepted
time: 148ms
memory: 14284kb
input:
96 96 2 453296971
output:
222864385
result:
ok single line: '222864385'
Test #32:
score: 0
Accepted
time: 157ms
memory: 13160kb
input:
85 96 2 859572601
output:
457416092
result:
ok single line: '457416092'
Test #33:
score: 0
Accepted
time: 150ms
memory: 12676kb
input:
89 94 2 753918677
output:
366789523
result:
ok single line: '366789523'
Test #34:
score: 0
Accepted
time: 122ms
memory: 13396kb
input:
91 92 2 202806031
output:
64270709
result:
ok single line: '64270709'
Test #35:
score: 0
Accepted
time: 2ms
memory: 3680kb
input:
100 100 1 493945957
output:
109570004
result:
ok single line: '109570004'