题目大意是给两个变量n和k,n表示数组的大小,数组中的元素值不能超过2的k次方。
同时,它还要求满足其他两个条件
首先,使用元素按位和等于0
这个好理解,比如4的二进制是10,1的二进制是01,它们的和为0
而在这个数组中,只要取一个数为0,那么位和就一定为0
它还要求元素之和应该尽量大
所以,我们除了0之外只能取,2的k次方减1到2的k次方减n-1的数,总共是k个,而每个元素都有这么多取法
因此,这道题的最终输出就是,n的k次方
#include<iostream>
#include<algorithm>
#include<cmath>
#include<stack>
#include<map>
#include<cstring>
#include<vector>
using namespace std;
const int maxn = 4e2 + 10;
typedef long long ll;
const int mod = 1e9 + 7;
int main()
{
int t;
cin >> t;
while (t--)
{
ll n, k;
cin >> n >> k;
ll ans = 1;
while (k)
{
if (k & 1)ans = (ans * n) % mod;
n = (n * n) % mod;
k >>= 1;
}
cout << ans << endl;
}
}