听说SDOI蛮简单的,但是SD蛮强的..
之所以是选做,是因为自己某些知识水平还不到位,而且目前联赛在即,不好花时间去学sa啊之类的..
bzoj4517
数论题,我这种不会错排的数论白痴都能手推出来,这题应该谁都能写吧。
#include<cstdio> #include<cstring> #include<algorithm> #define mo 1000000007 #define ll long long #define N 1000100 using namespace std; ll jie[N],g[N],f[N],ni[N]; ll quickmi(ll x) { ll tmp=1,k=mo-2,a=x; while(k>0) { if(k%2==1) { tmp=tmp*a%mo; } a=a*a%mo; k/=2; } return tmp; } ll cc(int n,int m) { return jie[n]*ni[m]%mo*ni[n-m]%mo; } int main() { jie[0]=1; for(int i=1;i<=1000000;i++)jie[i]=(jie[i-1]*i)%mo; ni[0]=1;ni[1]=1; for(int i=1;i<=1000000;i++) { ni[i]=quickmi(jie[i]); } f[0]=1;f[1]=0;f[2]=1;f[3]=2; g[0]=0;g[1]=1;g[2]=2;g[3]=9; for(int i=4;i<=1000000;i++) { f[i]=g[i-1]%mo; g[i]=(f[i-1]+g[i-1])%mo*i%mo; } int cas,n,m; scanf("%d",&cas); while(cas--) { scanf("%d%d",&n,&m); ll ans=cc(n,m)*f[n-m]%mo; printf("%lld\n",ans); } }
bzoj4517
时间: 2024-10-26 19:21:02