ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#197147 | #2378. 打怪升级 | tkswls | 100 | 1035ms | 380768kb | C++11 | 1.2kb | 2023-11-07 10:50:35 | 2023-11-07 12:11:00 |
answer
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 998244353;
int n, m, a[5005], sum, jie[30000007], inv[30000007], f[5005][5005], ssum[5005], cnt;
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 < 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);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
sum += a[i];
ssum[i] = ssum[i - 1] + a[i];
}
cnt = sum;
sum += 2 * n - m;
jie[0] = jie[1] = 1;
for (int i = 2; i <= sum; i++) {
jie[i] = jie[i - 1] * i % mod;
}
inv[sum] = ksm(jie[sum]);
for (int i = sum - 1; i >= 0; i--) {
inv[i] = (inv[i + 1] * (i + 1)) % mod;
}
f[m][0] = 1;
for (int i = m; i <= n; i++) {
for (int j = 0 + (i == m); j <= n; j++) {
if (j > i) f[i][j] = 0;
else f[i][j] = f[i][j - 1] * C(cnt - ssum[j - 1] + n - (j) + (n - i), a[j]) % mod + f[i - 1][j];
f[i][j] %= mod;
}
// for (int j = 0; j <= n; j++) {
// cout << f[i][j] << ' ';
/// }
// cout << endl;
}
cout << f[n][n];
}
Details
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 0ms
memory: 1280kb
input:
5 2 1 1 1 1 1
output:
54120
result:
ok 1 number(s): "54120"
Test #2:
score: 10
Accepted
time: 0ms
memory: 1296kb
input:
10 3 1 1 1 1 1 1 1 1 1 1
output:
836587775
result:
ok 1 number(s): "836587775"
Test #3:
score: 10
Accepted
time: 0ms
memory: 1264kb
input:
10 10 10 5 2 4 7 3 10 5 7 7
output:
170231657
result:
ok 1 number(s): "170231657"
Test #4:
score: 10
Accepted
time: 0ms
memory: 1292kb
input:
10 3 10 2 3 4 10 10 7 3 8 2
output:
43852022
result:
ok 1 number(s): "43852022"
Test #5:
score: 10
Accepted
time: 0ms
memory: 1996kb
input:
200 70 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...
output:
664926161
result:
ok 1 number(s): "664926161"
Test #6:
score: 10
Accepted
time: 0ms
memory: 1592kb
input:
200 200 141 25 82 146 124 14 47 152 97 41 98 163 106 96 104 58 100 8 187 68 188 34 70 46 47 136 175 ...
output:
833745003
result:
ok 1 number(s): "833745003"
Test #7:
score: 10
Accepted
time: 0ms
memory: 2384kb
input:
200 60 37 196 175 170 177 163 44 149 101 1 38 118 115 95 1 160 176 66 150 35 143 92 69 184 62 47 101...
output:
229896301
result:
ok 1 number(s): "229896301"
Test #8:
score: 10
Accepted
time: 139ms
memory: 187656kb
input:
5000 242 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...
output:
73699446
result:
ok 1 number(s): "73699446"
Test #9:
score: 10
Accepted
time: 133ms
memory: 196304kb
input:
5000 5000 1476 1811 2326 1822 4078 1233 1963 22 578 3272 2675 3 2718 4394 1967 1391 1542 14 2996 975...
output:
447854096
result:
ok 1 number(s): "447854096"
Test #10:
score: 10
Accepted
time: 763ms
memory: 380768kb
input:
5000 245 3269 4477 2256 420 412 2380 2449 1395 846 4830 2633 1514 2584 2319 1080 2725 672 3317 1741 ...
output:
340029830
result:
ok 1 number(s): "340029830"
Extra Test:
score: 0
Extra Test Passed