题目传送门
本蒟蒻被fst的自闭场~~
题意
这个题就是输入
n和k
意思就是从
2
k
−
1
2^k-1
2k−1和
1
1
1中挑选n个数,要求这n个数按位与&为0,并且要求和尽可能大,请问这种组合数有多少。
分析
这道题假定n个数二进制表示均为1(也就是每一位都是1)
这n个数中就转化为,每一位都必须出现一个0
举个栗子:
n=2,k=3
/ | 2 0 2^0 20 | 2 1 2^1 21 | 2 2 2^2 22 |
---|---|---|---|
第一个数 | 1 | 1 | 1 |
第二个数 | 1 | 1 | 1 |
我必须要在
2
2
2^2
22这一位选一个0,同理
2
1
2^1
21,
2
0
2^0
20都要选一个0(选一个0就好了,因为要求求和最大)
因此种类数就是
n
k
n^k
nk,每一位从n个数中选一个数,让这位为0就好。
#include<iostream>
using namespace std;
int mood=1e9+7;
typedef long long ll;
int main(){
int T;
cin>>T;
while(T--){
ll a,b;
cin>>a>>b;
ll ans=1;
while(b--){
ans*=a;
ans=ans%(mood);
}
cout<<ans<<endl;
}
}