五一劳动之第六题(快速幂板子)
作者:互联网
题目链接:https://vjudge.net/contest/436484#problem/F
输入n,k。
有长度为n的数组满足下面三个条件:
数组元素要小于等于2^k-1,大于等于0
数组内所有元素的&要为0
数组元素总和要最大
根据第一个条件,我们可以用长度为k的二进制数来表示数字的大小,因为共有n个数,所以构成了一个nk的二维数组,那么根据第二个条件,每一列至少要有一个0,根据第三个条件 每一列最多只有一个0,所以为题转化成求n^k,但是这里要用快速幂才行。
那再来说一下快速幂吧:
以9的五次方为例:
9的五次方可以看成994,再换就成为9*812,最后就变成9*6561就得到59049;
就是当次数为奇数是乘以一个底数,次数为偶数时将底数平方并且次数除以二;还要注意一下取余。。。。。
代码如下:(快速幂板子)
include
include
include<math.h>
using namespace std;
const int m=1e9+7;
int main(){
long long n,k,t;
cin>>t;
while(t--){
cin>>n>>k;
long long ans = 1;
while(k){
if(k&1){
ans = (ansn)%m;
}
n = (nn)%m;
k/=2;
}
cout<<ans<<endl;
}
return 0;
}
标签:int,第六,cin,long,板子,while,数组,五一劳动,include 来源: https://www.cnblogs.com/mrnaoketong/p/14724722.html