Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98838 | CSYZZhangZH | ssh | C++ | 通过 | 100 | 187 MS | 5748 KB | 1352 | 2023-08-16 19:36:56 |
#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e5+5,mod=1e9+7; int t,id[N],tim[N],inv[N]; struct node{ int id,n,k,whe,ans; }q[N]; bool cmp(node a,node b){ if(a.whe==b.whe) return a.n<b.n; else return a.whe<b.whe; } int qpow(int x,int y){ int sum=1; while(y>0){ if(y&1) sum=sum*x%mod; x=x*x%mod; y>>=1; } return sum; } int cale(int n,int k){ return tim[n]*inv[k]%mod*inv[n-k]%mod; } bool cmp2(node a,node b){ return a.id<b.id; } signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>t; int len=sqrt(1e5); for(int i=1;i<=t;++i){ cin>>q[i].n>>q[i].k; q[i].whe=(q[i].k-1)/len+1; q[i].id=i; } sort(q+1,q+t+1,cmp); tim[0]=1; inv[0]=1; for(int i=1;i<=1e5;++i) tim[i]=tim[i-1]*i%mod,inv[i]=qpow(tim[i],mod-2); int sum=1,n=0,k=0; for(int i=1;i<=t;++i){ for(;k>q[i].k;){ k--; sum=(sum-cale(n,k+1)+mod)%mod; } for(;n<q[i].n;){ n++; sum=(sum*2-cale(n-1,k)+mod)%mod; } for(;k<q[i].k;){ k++; sum=(sum+cale(n,k))%mod; } for(;n>q[i].n;){ n--; sum=(sum+cale(n,k))%mod*inv[2]%mod; } q[i].ans=sum; } sort(q+1,q+t+1,cmp2); for(int i=1;i<=t;++i) cout<<q[i].ans<<'\n'; return 0; }