提交时间:2023-08-16 12:10:55
运行 ID: 98642
#include <bits/stdc++.h> using namespace std; #define int long long const int M=1e9+7; int qpow(int x,int y) { int ans=1; while(y) { if(y&1) ans=(ans*x)%M; x=x*x%M; y>>=1; } return ans; } vector<int> g[100010]; int get_ans(int x,int y) { int l=(x+1)/2; int ans=g[x][l]; y-=l; if(x%2==1) { ans=(ans+g[x][l]-g[x][l-y]+M)%M; return ans; } else { ans=(ans+g[x][l-1]-g[x][l-y-1]+M)%M; return ans; } } signed main() { // freopen("ssh.in","r",stdin); // freopen("ssh.out","w",stdout); int t; cin>>t; while(t--) { int n,k; cin>>n>>k; if(g[n].size()==0) { int l=(n+1)/2; g[n].push_back(1); int now=1; int lst=1; for(int i=1;i<=l;i++) { now=((now*(n-i+1)%M)*qpow(i,M-2))%M; lst=(lst+now)%M; g[n].push_back(lst); } } if(k>=n) { cout<<qpow(2,n)%M<<endl; continue; } int l=(n+1)/2; if(k<=l) cout<<g[n][k]<<endl; else cout<<get_ans(n,k)<<endl; } return 0; }