ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#204014 | #2791. 历史 | tkswls | 100 | 2173ms | 5964kb | C++11 | 1.5kb | 2024-04-02 08:25:45 | 2024-04-02 21:17:41 |
answer
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define int long long
const int mod = 998244353;
using namespace std;
int n, val[105], m, f[105][105][105], jie[5005], inv[5005];
inline int ksm(int p, int q = mod - 2) {
int base = 1;
while (q) {
if (q & 1) base = base * p % mod;
q >>= 1;
p = p * p % mod;
}
return base;
}
inline int C(int p, int q) {
if (p < 0 || q < 0 || p < q) return 0;
return jie[p] * inv[q] % mod * inv[p - q] % mod;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
jie[0] = inv[0] = 1;
for (int i = 1; i <= 5000; i++) {
jie[i] = jie[i - 1] * i % mod;
inv[i] = ksm(jie[i]);
}
cin >> n;
int p;
for (int i = 1; i <= n; i++) {
cin >> p;
val[p]++;
}
for (int i = 1; i <= 100; i++) {
if (val[i]) val[++m] = val[i];
}
f[0][0][0] = 1;
int ans = 0;
for (int i = 1; i <= m; i++) {
for (int j = 0; j <= i; j++) {//选了多少
for (int k = 0; k <= m; k++) { //覆盖了多少,定义为第一次出现到最后一次附加的段数
f[i][j][k] = f[i - 1][j][k];
if (j) {
for (int p = 1; p <= k; p++) {
if (p == 1)f[i][j][k] = (f[i][j][k] + f[i - 1][j - 1][k - 1] * j % mod) % mod;
else f[i][j][k] = (f[i][j][k] + f[i - 1][j - 1][k - p] * C(val[i] + p - 3, p - 1) % mod * j % mod) % mod;
}
}
}
}
}
ans = 0;
for (int i = 1; i <= m; i++) {
ans = (ans + f[m][i][m] * jie[m - i] % mod) % mod;
}
for (int i = 1; i <= m; i++) ans = ans * jie[val[i]] % mod;
cout << ans;
}
这程序好像有点Bug,我给组数据试试?
Details
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 2ms
memory: 1376kb
input:
10 3 4 1 10 3 7 2 5 4 1
output:
612864
result:
ok "612864"
Test #2:
score: 10
Accepted
time: 0ms
memory: 1368kb
input:
10 4 1 2 3 7 3 2 3 8 3
output:
959616
result:
ok "959616"
Test #3:
score: 10
Accepted
time: 2ms
memory: 1416kb
input:
3000 3 3 8 2 3 5 2 2 4 1 1 3 8 1 6 7 1 1 2 10 1 9 3 3 2 3 2 2 1 3 1 1 6 1 7 10 1 9 7 2 1 3 1 2 6 3 1...
output:
111394605
result:
ok "111394605"
Test #4:
score: 10
Accepted
time: 368ms
memory: 5964kb
input:
5000 18 23 31 2 41 20 3 1 49 28 10 1 25 2 55 1 4 1 15 38 45 1 87 55 49 2 30 1 92 3 37 1 68 10 3 20 5...
output:
562512735
result:
ok "562512735"
Test #5:
score: 10
Accepted
time: 41ms
memory: 3444kb
input:
300 5 47 17 16 1 20 1 15 7 14 4 38 19 59 1 74 4 57 1 1 11 1 3 1 6 31 98 4 12 5 40 4 16 9 1 29 4 18 1...
output:
926527742
result:
ok "926527742"
Test #6:
score: 10
Accepted
time: 143ms
memory: 5784kb
input:
99 1 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 3...
output:
509457672
result:
ok "509457672"
Test #7:
score: 10
Accepted
time: 405ms
memory: 5964kb
input:
5000 1 2 3 24 4 1 5 16 3 6 36 10 1 3 55 42 2 2 1 1 2 97 3 2 44 10 14 6 1 1 11 62 8 14 3 3 60 1 2 6 1...
output:
502114207
result:
ok "502114207"
Test #8:
score: 10
Accepted
time: 407ms
memory: 5964kb
input:
5000 45 9 6 3 1 5 3 56 5 24 1 26 36 3 1 56 5 21 2 24 41 3 45 24 23 13 93 1 2 4 6 3 3 2 30 4 8 1 1 3 ...
output:
434274969
result:
ok "434274969"
Test #9:
score: 10
Accepted
time: 403ms
memory: 5964kb
input:
5000 2 27 18 2 25 12 43 1 5 10 3 16 4 6 64 3 63 86 1 1 2 4 27 13 1 3 8 39 5 2 23 6 15 30 94 1 20 27 ...
output:
829057783
result:
ok "829057783"
Test #10:
score: 10
Accepted
time: 402ms
memory: 5960kb
input:
5000 3 10 4 12 49 10 1 1 14 5 10 73 4 41 56 18 16 1 4 6 2 1 5 4 14 2 7 7 32 5 34 44 14 37 48 45 2 6 ...
output:
133737347
result:
ok "133737347"
Extra Test:
score: 0
Extra Test Passed