QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#839398#7712. Rikka with Bridgesgrass8cowAC ✓115ms7828kbC++171.6kb2025-01-01 18:30:112025-01-01 18:30:13

Judging History

This is the latest submission verdict.

  • [2025-01-01 18:30:13]
  • Judged
  • Verdict: AC
  • Time: 115ms
  • Memory: 7828kb
  • [2025-01-01 18:30:11]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
int K;
int st[50],t[50];
int jc[1010],ij[1010];
int mod;
void dfs(int x,int z,int b);
int g[50][40],f[110][40];
void ad(int &x,int y){
	x+=y;if(x>=mod)x-=mod;
}
void dfs(int x,int z,int b){
	if(x==b){
		b=0;
		for(int i=x-1;i;i--)if((st[x]>>i)&1)b=i;
		if(!b)return;
		t[b]++;
		if(z){
			int A=jc[x-1];
			for(int i=1;i<=x;i++)A/=jc[t[i]];
			g[x][z]+=A;
		}
			//计入答案 
			if(x<K+2)dfs(x+1,z,b);
			t[b]--;
		return;
	}
	int z_=z+__builtin_popcount(st[x]&st[b]);
	//for(int i=1;i<b;i++)if(a[i][x]&&a[i][b])z_++;
	if(z_<=K)dfs(x,z_,b+1);
	z_=z+__builtin_popcount((st[x]^st[b])&((1<<b)-1));
	//for(int i=1;i<b;i++)if(a[i][x]^a[i][b])z_++;
	st[x]|=(1<<b),st[b]|=(1<<x);
	if(z_<=K)dfs(x,z_,b+1);
	st[x]^=(1<<b),st[b]^=(1<<x);
}
int n,c[1010][1010],B[1010];
void sol(){
	scanf("%d%d%d",&n,&K,&mod);
	c[0][0]=B[0]=1;
	for(int i=1;i<=n;i++){
		c[i][0]=1;
		for(int j=1;j<=i;j++)
		c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
		B[i]=0;
		for(int j=1;j<=i;j++)
		ad(B[i],1ll*B[i-j]*c[i-1][j-1]%mod);
	}
	memset(f,0,sizeof(f));
	f[0][0]=1;
	for(int i=1;i<=K*3&&i<=n;i++){
		for(int j=1;j<=i;j++)for(int z=1;z<=K;z++)if(g[j][z])
		for(int o=0;o+z<=K;o++)if(f[i-j][o])
		ad(f[i][o+z],1ll*f[i-j][o]*g[j][z]%mod*c[i-1][j-1]%mod);
	}
	int ans=0;
	for(int i=0;i<=K*3&&i<=n;i++){
		int e=0;
		for(int j=0;j<=K;j++)ad(e,f[i][j]);
		ad(ans,1ll*c[n][i]*B[n-i]%mod*e%mod);
	}
	printf("%d\n",ans);
}
int main(){
	jc[0]=1;
	for(int i=1;i<=10;i++)jc[i]=jc[i-1]*i;
	K=8,dfs(2,0,1);
	int T;scanf("%d",&T);while(T--)sol();
	return 0;
} 

詳細信息

Test #1:

score: 100
Accepted
time: 4ms
memory: 7828kb

input:

3
4 1 1000000007
4 2 1000000007
1000 8 1000000007

output:

27
57
509805471

result:

ok 3 number(s): "27 57 509805471"

Test #2:

score: 0
Accepted
time: 115ms
memory: 7780kb

input:

1000
947 1 190045441
921 0 190957342
925 3 379055266
922 3 138932561
965 8 952228308
919 7 140290004
970 4 995697796
902 6 576851770
927 8 144664381
931 7 208740840
943 6 371258405
928 1 214885391
960 2 394217446
954 5 653450475
904 7 203193504
979 0 112018196
923 4 664143610
993 2 725404445
923 3 7...

output:

61807195
188034611
43610239
134056614
710456426
78761784
876107835
85363001
46431730
142635522
241796906
64783608
168537413
326508850
57592149
35340001
312280924
351639512
83473039
363633444
625324787
181152844
751514576
404230266
93887237
138771641
564862182
225822133
284667554
580218579
125420274
...

result:

ok 1000 numbers