QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#97589 | #5820. 置换 | AbdelmagedNour | 100 ✓ | 7ms | 3588kb | C++20 | 1.8kb | 2023-04-17 11:38:58 | 2023-04-17 11:39:02 |
Judging History
answer
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
const int N=5000,mod=998244353;
typedef long long ll;
ll Fact[N+5],inv[N+5];
ll inverse(int x){
return inv[x]*Fact[x-1]%mod;
}
void pre(){
Fact[0]=Fact[1]=inv[0]=inv[1]=1;
for(int i=2;i<=N;i++){
Fact[i]=i*Fact[i-1]%mod;
inv[i]=mod-mod/i*inverse(mod%i)%mod;
inv[i]=inv[i]*inv[i-1]%mod;
}
}
ll Power(ll x,ll n){
ll res=1;
while(n){
if(n&1)res=res*x%mod;
x=x*x%mod;
n>>=1;
}
return res;
}
ll C(ll n,ll r){
return Fact[n]*inv[n-r]%mod*inv[r]%mod;
}
ll Calc(ll n,ll k,ll len){//merge k cycles with length len from n cycles;
return C(n-1,k-1)*Fact[k-1]%mod*Power(len,k-1)%mod;
}
ll Solve(ll n,ll m,ll K){//n cycles of length m
ll dp[n+1]={};
dp[0]=1;
vector<int>v;
for(int i=1;i<=n;i++){
if(__gcd(m*i,K)==i)v.push_back(i);
}
for(int i=1;i<=n;i++){
for(auto&j:v){
if(j>i)break;
dp[i]+=dp[i-j]*Calc(i,j,m)%mod;
}
dp[i]%=mod;
}
return dp[n];
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
pre();
int t;
cin>>t;
while(t--){
int n,K;
cin>>n>>K;
int a[n],vis[n]={},freq[n+1]={};
for(int i=0;i<n;i++)cin>>a[i],a[i]--;
for(int i=0;i<n;i++){
if(vis[i])continue;
int x=i,sz=0;
while(!vis[x]){
sz++;
vis[x]=1;
x=a[x];
}
freq[sz]++;
}
ll res=1;
for(int i=1;i<=n;i++){
if(freq[i])res=res*Solve(freq[i],i,K)%mod;
}
cout<<res<<"\n";
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 10
Accepted
time: 2ms
memory: 3432kb
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 56 505 16 721 16 0 11264 1 396
result:
ok 10 lines
Test #2:
score: 10
Accepted
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 6224 1 25 25 1 256 1 2052
result:
ok 10 lines
Test #3:
score: 10
Accepted
time: 2ms
memory: 3420kb
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:
256 0 1 1 1 145 0 16 0 1072
result:
ok 10 lines
Test #4:
score: 10
Accepted
time: 2ms
memory: 3484kb
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 656150888 0 81372935 449319403 668622514 0 197618537
result:
ok 10 lines
Test #5:
score: 10
Accepted
time: 2ms
memory: 3436kb
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 544069454 632190035 152238854 0 0 0 0 0 516424712
result:
ok 10 lines
Test #6:
score: 10
Accepted
time: 0ms
memory: 3428kb
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 860677875 959811756 321535122 338992584 1 612643713
result:
ok 10 lines
Test #7:
score: 10
Accepted
time: 7ms
memory: 3588kb
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 786737927 0 0 763158174 313494335 0 115362240 0 812621299
result:
ok 10 lines
Test #8:
score: 10
Accepted
time: 5ms
memory: 3572kb
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 906525565 0 828991020 934355630 0 0 0 292138865
result:
ok 10 lines
Test #9:
score: 10
Accepted
time: 3ms
memory: 3484kb
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 207595358 0 0 866344799 0 0 0 0 296522134
result:
ok 10 lines
Test #10:
score: 10
Accepted
time: 5ms
memory: 3584kb
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 705667952 269633609 0 0 0 0 134859407
result:
ok 10 lines
Extra Test:
score: 0
Extra Test Passed