求卡常
查看原帖
求卡常
723466
banned_gutongxing楼主2024/6/3 21:33
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 410;
const int MOD = 1e9+7;
int n,m,c,ans;
int qpow(int a,int b){
	if(b==0) return 1;
	if(b==1) return a;
	int k = qpow(a,b>>1);
	k*=k;k%=MOD;
	if(b&1) k*=a;k%=MOD;
	return k;
}
int C[MAXN][MAXN];
long long mm, p;
void init(int pp) { mm = ((__int128)1 << 64) / pp; p = pp; }
long long o(const long long x)
{
    return x - ((__int128(x) * mm) >> 64) * p;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0); 
	cin >> n >> m >> c;init(MOD);
	for(register int i=0;i<=400;i++){
		C[i][0]=1;
		for(register int j=1;j<=i;j++){
			C[i][j]=o(C[i-1][j-1]+C[i-1][j]);
		}
	}
	for(int i = 0;i<=n;i++){
		for(int j = 0;j<=m;j++){
			for(int k = 0;k<=c;k++){
				ans += o(o(o(o(o((i+j+k)&1?-1:1)*C[n][i])*C[m][j])*C[c][k])*qpow(c-k+1,n*m-i*m-j*n+i*j));
				ans = o(ans);
			}
		}
	}
	cout << o(o(ans)+MOD);
	return 0;
}

here

2024/6/3 21:33
加载中...