Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98606 | CSYZ_GaoSL | ssh | C++ | 运行超时 | 0 | 1000 MS | 2212 KB | 1301 | 2023-08-16 12:08:20 |
#include<bits/stdc++.h> using namespace std; #define mod 1000000007 #define ll long long #define N 100005 inline ll qpow(ll n,ll p){ ll res=1; while(p){ if(p&1)res*=n,res%=mod; n*=n,n%=mod; p>>=1; } return res; } struct que{ int n,k,id; inline bool operator<(const que&x)const{ return n<x.n; } }q[N]; ll ans[N]; ll C[2]; int main(){ bool fl=1; int T; scanf("%d",&T); for(int i=1;i<=T;i++){ scanf("%d%d",&q[i].n,&q[i].k),q[i].id=i; if(i>1&&q[i].n!=q[i-1].n)fl=0; } if(fl){ sort(q+1,q+T+1); ll k=1,n=q[1].n; ll Ans=1; for(int i=1;i<=T;i++){ for(;k<=q[i].k;k++) C[k&1]=(C[!(k&1)]*(n-k+1)%mod)*qpow(k,mod-2)%mod, Ans+=C[k&1],Ans%=mod; ans[q[i].id]=Ans; } for(int i=1;i<=T;i++) printf("%lld\n",ans[i]); }else{ for(int i=1;i<=T;i++){ C[0]=1,C[1]=0; ll Ans=1; for(int k=1;k<=q[i].k;k++) C[k&1]=(C[!(k&1)]*(q[i].n-k+1)%mod)*qpow(k,mod-2)%mod, Ans+=C[k&1],Ans%=mod; printf("%lld\n",Ans); } } return 0; }