WA 30pts求调
查看原帖
WA 30pts求调
763878
Jerry_heng楼主2024/10/27 10:31
//2024-10-27 09:39:10
#include<bits/stdc++.h>
#define db double
#define pb push_back
#define eb emplace_back
#define fi first
#define se second
#define mkp make_pair
#define pii pair<int,int>
#define int long long
using namespace std;
bool MBE;
inline int read(){
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-f;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f; 
}
const int md=1e9+7;
int n,m,c,fac[510],inv[510],f[510],res;
inline int pw(int x,int y){
    int ans=1;
    while(y){
        if(y&1)ans=ans*x%md;
        x=x*x%md;
        y>>=1;
    }
    return ans;
}
int C(int x,int y){
	if(x<y)return 0;
	if(x==y||y==0)return 1;
	return fac[x]*inv[y]%md*inv[x-y]%md;
}
signed main(){
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif
    n=read(),m=read(),c=read();
    int p=500;
    fac[0]=fac[1]=inv[0]=inv[1]=1;
    for(int i=2;i<=p;i++)
    	fac[i]=fac[i-1]*i%md,inv[i]=inv[md%i]*(md-md/i)%md;
    for(int i=2;i<=p;i++)
    	inv[i]=inv[i-1]*inv[i]%md;
    for(int i=0;i<=c;i++){
    	for(int k=0;k<=m;k++)
    		f[i]=(f[i]+((k&1)?(md-1):1)*C(m,k)%md*pw(pw(i+1,k)-1+md,n)%md)%md;
    }
    for(int i=0;i<=c;i++){
    	res=(res+((i&1)?(md-1):1)*C(c,i)%md*f[c-i]%md)%md;
    }
    printf("%lld\n",res);
    bool MED;
    cerr<<(&MED-&MBE)/1048576.0<<" MB, "<<1000*clock()/CLOCKS_PER_SEC<<" ms\n";
    return 0;
}
2024/10/27 10:31
加载中...