关于 CF 灵异事件
  • 板块学术版
  • 楼主EEchoyukii
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/4/1 18:47
  • 上次更新2023/10/28 04:55:23
查看原帖
关于 CF 灵异事件
212833
EEchoyukii楼主2022/4/1 18:47

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;
}

2022/4/1 18:47
加载中...