QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#103063#5820. 置换sichengzhou100 ✓17ms3932kbC++141.6kb2023-05-04 11:08:402023-05-04 11:08:44

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-05-04 11:08:44]
  • 评测
  • 测评结果:100
  • 用时:17ms
  • 内存:3932kb
  • [2023-05-04 11:08:40]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=3030,mod=998244353;
int n,m,a[N],cnt[N],vis[N],pd[N];
LL ans,f[N],fac[N],inv[N];
LL ksm(LL x,int y)
{
	LL ret=1;
	while(y)
	{
		if(y&1)
		{
			ret=ret*x%mod; 
		}
		x=x*x%mod;
		y>>=1;
	}
	return ret;
}
int gcd(int x,int y)
{
	if(y==0)
	{
		return x;
	}
	return gcd(y,x%y);
}
void work()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		cnt[i]=0;vis[i]=0;
	}
	fac[0]=1;
	for(int i=1;i<=n;i++)
	{
		fac[i]=fac[i-1]*i%mod;
	}
	inv[n]=ksm(fac[n],mod-2);
	for(int i=n-1;i>=0;i--)
	{
		inv[i]=inv[i+1]*(i+1)%mod;
	//	cout<<inv[i]<<endl;
	}
	for(int i=1;i<=n;i++)
	{
		if(vis[i]==0)
		{
			int len=1;
			vis[i]=1;
			for(int j=a[i];j!=i;j=a[j])
			{
				vis[j]=1;
				len++;
			}
			cnt[len]++;
		}
	}
//	cout<<"ye\n";
	LL ans=1;
	for(int i=1;i<=n;i++)
	{
		//knapsack of l1,l2,..,lm,(l1+..+lm)=cnt[i],fac[l1-1]*i^(l1-1)
		f[0]=1;
		for(int j=1;j<=cnt[i];j++)
		{
			int len=j*i;
			if(len/gcd(len,m)==i)
			{
				pd[j]=1;
			}else{
				pd[j]=0;
			}
		}
		for(int k=1;k<=cnt[i];k++)
		{
			f[k]=0;
			for(int j=1;j<=k;j++)
			{
				if(pd[j]==0)
				{
					continue; 
				}
				int len=j*i;
				if(len/gcd(len,m)!=i)
				{
					continue;
				}
				f[k]+=f[k-j]*fac[k-1]%mod*inv[j-1]%mod*inv[k-j]%mod
				*ksm(i,j-1)%mod*fac[j-1]%mod;
				f[k]%=mod;
			}
		//	cout<<k<<' '<<f[k]<<endl;
		}
		ans*=f[cnt[i]];
		ans%=mod;
	}
	printf("%lld\n",ans);
}
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		work();
	}
	return 0;
}

详细

Test #1:

score: 10
Accepted
time: 2ms
memory: 3864kb

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: 0ms
memory: 3608kb

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: 1ms
memory: 3608kb

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: 0ms
memory: 3616kb

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: 0ms
memory: 3592kb

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: 2ms
memory: 3644kb

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: 12ms
memory: 3932kb

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: 17ms
memory: 3760kb

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: 10ms
memory: 3764kb

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: 12ms
memory: 3708kb

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