链接:https://codeforces.ml/problemset/problem/1514/B
题意:输入n和k,找出有多少个满足条件的数组:
1.数组长度为n,且每个元素不能超过2的k次方
2.所有元素按位和为0(&)
3.所有元素和尽可能大;
题解:如果要满足第二个条件只需要数组里面有一个0;又因为和要尽可能大,那剩下的n-1个元素就需要在取值范围里尽可能大,取值范围为{2^k-(n-1)<=x<=2^k-1},所以每个位置有k种取法(算0),一共n个位置,所以答案是n^k;
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod = 1e9 + 7;
int main()
{
int t;
cin >> t;
while (t--)
{
ll a;
ll ans = 1;
cin >> a;
ll b;
cin >> b;
while(b)
{
if (b & 1)
{
ans = (ans * a) % mod;
}
a = (a * a) % mod;
b >>= 1;
}
cout << ans << endl;
}
}