分析:
可以分为两种情况:
1.n元钱可以全部都买下。
2.n不能都买下。
第一种,如果都可以买下说明可以任意买,只需要决定买与不买,每一种甜点都有买与不买两种选择,方案数就是2的k次方,但要注意k过大会越界,当越界的时候一定不能都买。
第二种,不能都买,只能挑一部分买,因为价钱是二进制表示,因此可以表示任何数,可以这样想,枚举可以花i元钱的方案,然后选甜点来恰好凑够i元,比如10的二进制表示为1010,那么可以用2的1次方和2的8次方表示,以此类推,0~n之间的每一个数都可以找出特定且唯一的表示方式,也就是选甜点的方案,因此一共有n+1种。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
void solve()
{
int t;
cin>>t;
while(t--)
{
ll n,k;
cin>>n>>k;
if(k>31) cout<<n+1<<'\n';
else cout<<min((ll)pow(2,k),n+1)<<'\n';
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}