记录编号 612116 评测结果 AAAAAAAAAA
题目名称 4304.数图 最终得分 100
用户昵称 Gravatar2_16鸡扒拌面 是否通过 通过
代码语言 C++ 运行时间 3.894 s
提交时间 2026-02-10 14:55:51 内存使用 8.37 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
#define ffor(i,a,b) for(int i=(a);i<=(b);i++)

using namespace std;
const int MAXN=1000+10;
int n,MOD=1e9+7,frac[MAXN],dp[MAXN][MAXN],f[MAXN][MAXN],C[MAXN][MAXN],p2[MAXN],i2[MAXN];
signed main() 
{
    freopen("grafy.in","r",stdin);
    freopen("grafy.out","w",stdout);
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>n;
	p2[0]=1; 
    ffor(i,1,n) 
        p2[i]=p2[i-1]*2%MOD;
	i2[0]=1; 
    ffor(i,1,n) 
        i2[i]=i2[i-1]*(MOD+1)/2%MOD;
	frac[0]=1; 
    ffor(i,1,n+n) 
        frac[i]=frac[i-1]*i%MOD;
	ffor(i,0,n) 
    {
		C[i][0]=1;
		ffor(j,1,i) 
            C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;	
	}
	ffor(i,0,n) 
    ffor(j,0,i) 
    {
		if(j==0) 
        {
            f[i][j]=1; 
            continue;
        }
		f[i][j]=(i-j)*f[i-1][j-1]%MOD;
		if(j-1) f[i][j]=(f[i][j]+(j-1)*(f[i-2][j-2]+f[i-1][j-1]))%MOD;
	}
	ffor(i,0,n+n) 
    ffor(j,0,i) 
    {
		if(j==0) {dp[i][j]=frac[i];continue ;}
		dp[i][j]=(i-j)*dp[i-1][j-1]%MOD;
		if(j-1) dp[i][j]=(dp[i][j]+(j-1)*(dp[i-2][j-2]+dp[i-1][j-1]))%MOD;
	}
	int ans=0;
	ffor(c,0,n)
        ffor(a,c,n) 
            ffor(b,c,n+c-a) 
            {
	        	int mul=C[n][c]*C[n-c][a-c]%MOD*C[n-a][b-c]%MOD;
		        if((a+b-c)&1) mul=-mul;
		        ans=(ans+mul*p2[b-c]%MOD*f[n-b][a-c]%MOD*dp[2*(n-a-b+c)+b-c][b-c]%MOD*i2[n-a-b+c])%MOD;
	        }
    ans=ans*i2[n]%MOD;
	cout<<(ans%MOD+MOD)%MOD;
	return 0;
}