ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#190630 | #3383. 排列计数 | WilliamFranklin | 100 | 613ms | 40004kb | C++11 | 1.1kb | 2023-10-06 16:56:40 | 2023-10-06 18:36:15 |
answer
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define mp(Tx, Ty) make_pair(Tx, Ty)
#define For(Ti, Ta, Tb) for(auto Ti = (Ta); Ti <= (Tb); Ti++)
#define Dec(Ti, Ta, Tb) for(auto Ti = (Ta); Ti >= (Tb); Ti--)
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define range(Tx) begin(Tx),end(Tx)
const int N = 2005, mod = 1e9 + 7;
long long f[N][N][2];
int main() {
//freopen("count.in", "r", stdin);
cin.tie(nullptr)->sync_with_stdio(false);
int t;
cin >> t;
int n, k;
f[1][0][0] = 1;
f[1][0][1] = 0;
For(i, 2, 2001 - 1) {
For(j, 0, i - 1) {
f[i][j][0] = (f[i - 1][j][0] * max((i - 2 - j), 0) % mod + f[i - 1][j][1] * max(0, (i - 2 - (j - 1))) % mod + f[i - 1][j + 1][0] * (j + 1) % mod + f[i - 1][j + 1][1] * j % mod) % mod;
f[i][j][1] = (f[i - 1][j - 1][0] * 2 % mod + f[i - 1][j - 1][1] + f[i - 1][j][1]) % mod;
}
}
// For(i, 1, 5) {
// For(j, 0, 5) {
// cout << f[i][j][0] + f[i][j][1] << ' ';
// }
// cout << endl;
// }
while (t--) {
cin >> n >> k;
cout << (f[n][k][0] + f[n][k][1]) % mod << '\n';
}
return 0;
}
Details
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 26ms
memory: 39992kb
input:
10 2 0 5 1 6 3 3 0 7 5 4 2 1 0 8 7 5 0 5 2
output:
0 40 120 0 28 10 1 2 14 48
result:
ok 10 numbers
Test #2:
score: 10
Accepted
time: 20ms
memory: 40000kb
input:
5000 7 1 6 0 6 4 10 5 5 2 5 2 1 0 9 4 3 0 4 0 1 0 1 0 5 3 9 5 6 0 10 5 2 0 1 0 10 6 7 4 6 1 7 0 4 2 ...
output:
1580 90 22 54304 48 48 1 22120 0 2 1 1 16 4448 90 54304 0 1 7900 226 230 646 10 5242 2 1 256 120 256...
result:
ok 5000 numbers
Test #3:
score: 10
Accepted
time: 37ms
memory: 39992kb
input:
10 16 4 15 2 16 12 16 13 15 10 16 6 15 9 16 7 16 12 16 12
output:
581566967 460233251 68526 2710 928874 17532712 12781476 855005425 68526 68526
result:
ok 10 numbers
Test #4:
score: 10
Accepted
time: 26ms
memory: 40004kb
input:
5000 17 8 16 14 9 4 11 7 17 11 16 2 17 16 12 5 17 2 13 2 8 0 11 0 17 2 9 6 12 11 16 8 14 6 16 11 11 ...
output:
138966533 82 22120 12816 35340456 318111669 2 9086628 199486786 840969777 5242 5296790 199486786 540...
result:
ok 5000 numbers
Test #5:
score: 10
Accepted
time: 28ms
memory: 40004kb
input:
5000 1456 1455 1129 1128 1740 1739 1993 1991 13 12 1666 1665 1624 1622 324 323 1343 1341 517 515 764...
output:
2 2 2 11944 2 2 9730 2 8044 3088 2 2 2 2 2 2062 2 2 11194 2872 2 10906 8602 5014 9394 10276 2746 727...
result:
ok 5000 numbers
Test #6:
score: 10
Accepted
time: 23ms
memory: 40000kb
input:
5000 1512 1511 576 574 1001 999 17 15 62 60 321 319 1074 1073 679 678 1349 1346 479 478 1357 1354 46...
output:
2 3442 5992 88 358 1912 2 2 30781680 2 31148776 3622548 19814766 2 4654 3591226 9304 2 2 2 2 5870010...
result:
ok 5000 numbers
Test #7:
score: 10
Accepted
time: 34ms
memory: 40004kb
input:
5000 21 5 536 92 1923 1468 228 34 669 473 1877 191 1590 1240 595 283 1592 455 1431 143 412 394 1854 ...
output:
54209947 315711882 882079680 796859827 485176182 390915536 687425576 912171587 682756769 305725812 7...
result:
ok 5000 numbers
Test #8:
score: 10
Accepted
time: 28ms
memory: 40000kb
input:
5000 1289 510 1643 1246 1972 433 1980 1339 1882 1658 1748 948 1806 846 1944 1005 1941 134 1903 1216 ...
output:
962754391 439704646 245586907 147985120 588126189 365471651 611789713 636487942 288153152 837841585 ...
result:
ok 5000 numbers
Test #9:
score: 10
Accepted
time: 206ms
memory: 40004kb
input:
500000 425 285 1647 880 164 116 1369 1116 1448 1096 1619 744 507 247 1446 612 1111 882 1522 202 1574...
output:
872154174 396303714 583079896 887549697 727232216 329089713 362175302 526719073 427715444 511414460 ...
result:
ok 500000 numbers
Test #10:
score: 10
Accepted
time: 185ms
memory: 40000kb
input:
500000 1497 392 1808 47 1786 254 1987 1279 1473 312 1723 662 1830 594 1456 319 2000 1392 1561 412 18...
output:
383156697 721088138 292394234 159045024 685313232 643610915 477741929 257583674 732843624 78339813 2...
result:
ok 500000 numbers