QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#104599 | #5820. 置换 | Alkaid | 0 | 7ms | 3664kb | C++14 | 2.3kb | 2023-05-11 11:43:51 | 2023-05-11 11:43:53 |
Judging History
answer
#include <bits/stdc++.h>
#define N 3010
#define int long long
using namespace std;
const int mod = 998244353;
int t, n, m, k, a[N], dp[N], vis[N], cnt[N];
vector <int> arr;
namespace Math {
const int M = 3000;
int fac[N], ifac[N];
inline void add(int &x, int y) {
x = (x + y) % mod;
}
inline int power(int a, int b) {
int res = 1;
while(b) {
if(b & 1)
res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
inline void pre() {
fac[0] = ifac[0] = 1;
for(int i = 1; i <= M; i++)
fac[i] = fac[i - 1] * i % mod;
ifac[M] = power(fac[M], mod - 2);
for(int i = M - 1; i; i--)
ifac[i] = ifac[i + 1] * (i + 1) % mod;
}
inline int C(int n, int m) {
if(n < 0 || m < 0 || n - m < 0)
return 0;
return fac[n] * ifac[m] % mod * ifac[n - m] % mod;
}
}
using namespace Math;
inline int solve(int n, int m) {
arr.clear();
memset(dp, 0, sizeof dp);
for(int i = 1; i <= n; i++)
if(__gcd(m * i, k) == i)
arr.push_back(i);
dp[0] = 1;
for(int i = 1; i <= n; i++){
for(int u : arr) {
if(u > i)
break;
dp[i] = dp[i - u] * C(i - 1, u - 1) % mod * fac[u - 1] % mod * power(m, u - 1) % mod;
}
}
return dp[n];
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
pre();
cin >> t;
while(t--) {
memset(vis, 0, sizeof vis);
memset(cnt, 0, sizeof cnt);
cin >> n >> k;
for(int i = 1; i <= n; i++)
cin >> a[i];
for(int i = 1; i <= n; i++) {
if(vis[i])
continue;
int u = i, sz = 0;
while(!vis[u]){
vis[u] = 1;
++sz;
u = a[u];
}
cnt[sz]++;
}
int ans = 1;
for(int i = 1; i <= n; i++)
if(cnt[i])
ans = ans * solve(cnt[i], i) % mod;
cout << ans << endl;
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 2ms
memory: 3372kb
input:
10 6 5 1 2 6 3 4 5 5 8 1 2 3 4 5 7 5 1 2 3 4 5 6 7 4 4 1 2 3 4 7 7 1 2 3 4 5 6 7 4 4 1 2 3 4 5 4 1 2 4 3 5 8 8 1 2 3 4 5 6 7 8 4 5 1 3 2 4 6 6 1 2 3 4 5 6
output:
1 24 360 6 720 6 0 5040 1 120
result:
wrong answer 2nd lines differ - expected: '56', found: '24'
Test #2:
score: 0
Wrong Answer
time: 2ms
memory: 3380kb
input:
10 4 6 3 1 2 4 5 8 2 1 3 4 5 8 4 1 2 3 4 5 6 7 8 6 5 4 1 2 3 5 6 5 5 1 2 3 4 5 5 5 1 2 3 4 5 6 7 1 2 3 4 5 6 6 4 1 2 3 4 5 6 6 7 6 1 2 3 4 5 7 6 1 2 3 4 5 6 7
output:
0 0 1260 1 24 24 1 60 1 720
result:
wrong answer 3rd lines differ - expected: '6224', found: '1260'
Test #3:
score: 0
Wrong Answer
time: 0ms
memory: 3540kb
input:
10 6 602552 1 2 3 4 5 6 4 775694 1 2 4 3 6 668467 1 4 2 3 5 6 6 558385 1 2 6 3 4 5 7 832183 4 1 2 3 5 6 7 6 631375 1 2 3 4 5 6 8 519340 1 2 3 5 4 6 7 8 4 636124 1 2 3 4 4 759099 3 1 2 4 7 977752 1 2 3 4 5 6 7
output:
60 0 1 1 1 120 0 6 0 240
result:
wrong answer 1st lines differ - expected: '256', found: '60'
Test #4:
score: 0
Wrong Answer
time: 2ms
memory: 3552kb
input:
10 43 725761 1 2 3 4 5 6 7 8 10 9 11 12 13 15 14 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 37 542860 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 26 28 29 30 31 32 33 34 36 35 37 27 793967 2 1 4 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
output:
1 0 1 521425096 0 447152495 233673051 95434112 0 554847021
result:
wrong answer 4th lines differ - expected: '656150888', found: '521425096'
Test #5:
score: 0
Wrong Answer
time: 1ms
memory: 3428kb
input:
10 40 535121 3 1 2 4 5 6 7 8 9 11 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 43 660193 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 15 19 17 18 20 26 21 22 23 24 25 27 28 29 30 34 31 32 33 35 36 37 38 39 40 41 42 43 38 596459 1 2 4 3 5 6 7 8 9 10 11 12 13 15 14 ...
output:
1 404841570 565648511 322880772 0 0 0 0 0 192379424
result:
wrong answer 2nd lines differ - expected: '544069454', found: '404841570'
Test #6:
score: 0
Wrong Answer
time: 2ms
memory: 3576kb
input:
10 33 892596 1 2 6 3 4 5 9 7 8 10 11 12 14 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 32 30 31 33 39 875634 1 2 10 3 4 5 6 7 8 9 11 12 13 14 16 15 17 18 20 19 21 22 23 24 26 25 27 28 29 30 31 32 33 35 34 36 37 38 39 27 856117 1 2 3 4 5 10 6 7 8 9 11 12 13 14 15 16 17 18 20 19 21 24 22 23 25 26 ...
output:
0 0 1 0 384146150 738928701 837902046 567053423 1 162886865
result:
wrong answer 5th lines differ - expected: '860677875', found: '384146150'
Test #7:
score: 0
Wrong Answer
time: 1ms
memory: 3488kb
input:
10 2899 540778 3 1 2 4 5 6 9 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 24 23 27 25 26 28 29 30 31 32 33 34 35 37 36 38 39 40 41 42 44 43 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 70 68 69 71 72 73 74 75 76 77 78 80 79 81 82 83 89 84 85 86 87 88 90 91 92 93 94 95 96 97 98 ...
output:
0 976757268 0 0 449423429 633276628 0 285746301 0 904125811
result:
wrong answer 2nd lines differ - expected: '786737927', found: '976757268'
Test #8:
score: 0
Wrong Answer
time: 6ms
memory: 3664kb
input:
10 2310 568163 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 26 24 25 27 28 30 29 31 32 33 34 35 36 37 38 39 40 41 46 42 43 44 45 47 48 49 50 51 52 57 53 54 55 56 58 59 61 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 ...
output:
1 0 583720777 0 131715625 878388734 0 0 0 171650061
result:
wrong answer 3rd lines differ - expected: '906525565', found: '583720777'
Test #9:
score: 0
Wrong Answer
time: 7ms
memory: 3664kb
input:
10 1564 511376 1 2 3 4 5 6 8 7 9 10 11 12 13 14 15 16 20 17 18 19 21 22 23 24 25 26 28 27 29 30 31 35 32 33 34 36 41 37 38 39 40 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 76 74 75 77 78 82 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 97 95 96 98 ...
output:
0 852351591 0 0 622537653 0 0 0 0 628538336
result:
wrong answer 2nd lines differ - expected: '207595358', found: '852351591'
Test #10:
score: 0
Wrong Answer
time: 6ms
memory: 3392kb
input:
10 1749 969801 1 2 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 34 31 32 33 36 35 37 38 39 40 41 42 43 44 45 46 48 47 49 50 51 54 52 53 55 56 57 58 60 59 61 62 63 64 65 66 67 68 69 70 71 72 73 75 74 76 77 78 79 80 81 82 83 84 85 86 89 87 88 90 91 92 93 94 95 96 97 99 ...
output:
0 0 1 976749785 695197546 0 0 0 0 345181117
result:
wrong answer 4th lines differ - expected: '705667952', found: '976749785'