Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98827 | CSYZCaoMY | ssh | C++ | 运行出错 | 0 | 28 MS | 4540 KB | 1307 | 2023-08-16 16:12:10 |
#include<bits/stdc++.h> #define mod (1000000007) using namespace std; struct query{ int n,k,id; }q[100005]; long long ans[100005],f[100005],ta[100005],inv[100005]; inline long long C(int a,int b){ if(b>a) return 0; return ta[a]*inv[b]%mod*inv[a-b]%mod; } int main(){ int t,now=0,sq,n=0,k=0; scanf("%d",&t); for(int i=1;i<=t;i++) scanf("%d%d",&q[i].n,&q[i].k), q[i].id=i,sq=max(sq,q[i].n); ta[0]=ta[1]=inv[0]=inv[1]=1; for(int i=2;i<=sq;i++) ta[i]=ta[i-1]*i%mod, inv[i]=(mod-mod/i)*inv[mod%i]%mod; for(int i=2;i<=sq;i++) inv[i]=inv[i-1]*inv[i]%mod; sq=sqrt(sq); sort(&q[1],&q[t+1],[=](query x,query y){ return (x.n/sq==y.n/sq?x.k<y.k:x.n/sq<y.n/sq); }); long long cun=1; for(int i=1;i<=t;i++){ while(n<q[i].n) cun=(cun*2-C(n++,k)+mod)%mod; while(k<q[i].k) cun=(cun+C(n,++k))%mod; while(n>q[i].n) cun=(cun+C(--n,k))*inv[2]%mod; while(k>q[i].k) cun=(cun-C(n,k--)+mod)%mod; ans[q[i].id]=cun; } for(int i=1;i<=t;i++) printf("%lld\n",ans[i]); return 0; }/* Samples 1: Input: 10 1 1 3 2 5 2 8 3 12 0 642 246 2222 999 2525 21 50000 25000 100000 100000 Output: 2 7 16 93 1 321969783 856998846 371661809 969409843 607723520 */