提交时间:2023-08-16 12:08:44
运行 ID: 98615
#include<bits/stdc++.h> using namespace std; #define ll long long template<typename T>inline void read(T &ret){ ret=0;T fh=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')fh=-1;ch=getchar();} while(isdigit(ch))ret=(ret<<1)+(ret<<3)+(ch^48),ch=getchar(); ret*=fh; } template<typename T>inline void write(T ret,bool flag){ if(ret<0)putchar('-'),ret*=-1; static char out[25];int top=0; do{out[++top]=(ret%10)^48,ret/=10;}while(ret); for(;top;--top)putchar(out[top]); putchar(flag?' ':'\n'); } const int N=1e5+5; const ll mod=1e9+7; ll t,n[N],k[N],fac[N],inv[N],a[N]; inline ll ksm(ll x,ll y){ ll sum=1; for(;y;y>>=1){ if(y&1)sum=(sum*x)%mod; x=x*x%mod; } return sum; } inline ll C(ll x,ll y){ return fac[x]*inv[x-y]%mod*inv[y]%mod; } int main(){ // freopen("ssh.in","r",stdin); // freopen("ssh.out","w",stdout); fac[0]=inv[0]=1; for(int i=1;i<=100000;++i){ fac[i]=fac[i-1]*i%mod; inv[i]=ksm(fac[i],mod-2); } read(t);bool T=1; for(int i=1;i<=t;++i){ read(n[i]); read(k[i]); if(n[i]!=n[i-1]&&i>1)T=0; } if(T){ for(int i=0;i<=n[1];++i) a[i]=(a[i-1]+C(n[1],i))%mod; for(int i=1;i<=t;++i) write(a[k[i]],0); } else{ for(int i=1;i<=t;++i){ ll ans=0; for(int j=0;j<=k[i];++j) ans=(ans+C(n[i],j))%mod; write(ans,0); } } return 0; }