https://codeforces.com/contest/1228/problem/E
https://codeforces.com/contest/1228/submission/152278857
这份代码两个样例都过了。然鹅交上去 WA on test 1,说我样例一 2 2 输出 642850641。实际上洛谷IDE 和 DevC++都是输出 7.
求助一下咋办嘞。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define int long long
typedef long long ll;
using namespace std;
inline int read(){
register int x=0,f=0,ch=getchar();
while('0'>ch||ch>'9')f^=ch=='-',ch=getchar();
while('0'<=ch&&ch<='9')x=x*10+(ch^'0'),ch=getchar();
return f?-x:x;
}
int n,k,fac[255],ifac[255];
const int P=1e9+7;
inline int C(int n,int m){
return (ll)fac[n] * ifac[m]%P * ifac[n-m]%P;
}
inline int qpow(int x,int p){
int ret=1;
for(;p;p>>=1,x=(ll)x*x%P)if(p&1)ret=(ll)ret*x%P;
return ret;
}
int Pok[2][255*255];
inline void prep(int N=255){
fac[0]=1;
for(register int i=1;i<=N;++i)fac[i]=(ll)fac[i-1]*i%P;
ifac[N]=qpow(fac[N],P-2);
for(register int i=N;i>=1;--i)ifac[i-1]=(ll)ifac[i]*i%P;
Pok[0][0]=Pok[1][0]=1;
for(register int i=1;i<=250*250;++i){
Pok[0][i]=(ll)Pok[0][i-1] * (k-1)%P;
Pok[1][i]=(ll)Pok[1][i-1] * k%P;
}
}
signed main(){
n=read(),k=read();
int ans=0; prep();
for(register int i=0;i<=n;++i){
for(register int j=0;j<=n;++j){
int tmp=(ll)C(n,i) * C(n,j) % P * Pok[0][(i+j)*n-i*j] % P * Pok[1][n*n-(i+j)*n+i*j] % P;
if(i+j&1){
ans=(ans-tmp+P)%P;
}else ans=(ans+tmp)%P;
}
}
printf("%lld\n",ans);
return 0;
}