1 条题解
-
0

#include <cstdio> #define int long long const int MOD = 1e8+7; const int M = 1000005; int read() { int x=0,f=1;char c; while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;} while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();} return x*f; } int n,m,pw,fac,f[M],A[M]; int qkpow(int a,int b) { int r=1; while(b>0) { if(b&1) r=r*a%MOD; a=a*a%MOD; b>>=1; } return r; } signed main() { n=read();m=read();pw=A[0]=f[0]=fac=1; for(int i=1;i<=n;i++) pw=pw*2%MOD; for(int i=1;i<=m;i++) fac=fac*i%MOD; for(int i=1;i<=m;i++) A[i]=A[i-1]*(pw-i)%MOD; for(int i=1;i<=m;i++) { f[i]=A[i-1]-f[i-1]; if(i>1) f[i]-=f[i-2]*(i-1)%MOD*(pw-i+1)%MOD; f[i]=(f[i]%MOD+MOD)%MOD; } printf("%lld\n",f[m]*qkpow(fac,MOD-2)%MOD); }
- 1
信息
- ID
- 4004
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者