提交时间:2023-08-16 11:01:28
运行 ID: 98567
#include<cstdio> #include<cctype> #include<algorithm> #define Z static inline using I=int;using L=long long;const I N=1e5+1,P=1e9+7; Z I rd(){I x,c;while(!isdigit(c=getchar())); for(x=c-'0';isdigit(c=getchar());x=x*10+c-'0');return x;} Z void wr(L x){static char k[16];char t=0; do{k[t++]=x%10;x/=10;}while(x);for(;t;putchar(k[--t]+'0'));} Z L pw(L b,I p){L w=1;for(;p;b=b*b%P,p>>=1)if(p&1)w=w*b%P;return w;} L inv[N];int main(){inv[1]=1;for(I i=2;i<N;i++)inv[i]=(P-P/i)*inv[P%i]%P; L x;I t=rd();for(I n,k;t--&&(n=rd(),k=rd(),1);){L w=0,f=1; I m=std::min(k+1,n-k);for(I i=0;i<=m-1;i++,(f*=(n-i+1)*inv[i]%P)%=P) (w+=f)>=P?(w-=P):0;wr(m==k+1?w:(x=pw(2,n)-w)<0?x+P:x);putchar('\n');}}