第二个样例后三个数据不对
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef long long LL;
const int N=2e5+5,INF=8e18;
int T;
int n,x,k;
int nd;
int Get(int p){
if(p>n || p==0) return 0;
if(!k) return 1;
int nw;
int l=INF,r=INF;
nw=p;
for(int i=1;i<=k;i++){
nw*=2;
if(nw>n) break;
}
int po=log2(nw);
if(po-nd==k && nw<=n) l=nw;
if(l==INF) return 0;
nw=p;
for(int i=1;i<=k;i++){
nw=nw*2+1;
if(nw>n) break;
}
po=log2(nw);
if(po-nd==k){
if(nw>n) nw=n,r=n;
else r=nw;
}
if(l<=r && l!=INF && r!=INF)
return r-l+1;
return 0;
}
signed main(){
cin>>T;
while(T--){
cin>>n>>x>>k;
nd=log2(x);
int ans=Get(x);
int lst; k--;
if(k<0){
cout<<ans<<"\n";
continue;
}
while(x>=1){
lst=x;
x/=2;
if(!x) break;
if(!k){
ans++;
break;
}
k--;
if(lst&1) ans+=Get(x*2);
else ans+=Get(x*2+1);
nd--;
}
cout<<ans<<"\n";
}
return 0;
}