题意:给定n,k
元素为[0,2^k-1],(一共2^k个数),选n个数组成数列,使得
1:所有元素的&的和为0
2:所有元素的和尽量大
解:
假如n=2,k=2.可知元素只有2位
0:00
1:01
2:10
3:11
由条件1:数列的元素中,每一位至少有1个0
那么(0,2),(1,3)或(0,3),(1,2),都是可以的
但是有条件2的限制,那么只有(0,3),(1,2)是可以的
也就是说(0,3)比(0,2)更优
ans=2
注意到有k位,那么对于一个位,要选k次
又根据条件2,则每位选,有n个可能(只选n个数,可以保证)
由乘法原理:ans=n^k
假如k=3
0:000
1:001
2:010
3:011
4:100
5:101
6:110
7:111
n=1,只能选0
n=2,(0,7),(2,5),(4,3)(1,6)res=4*2=8=2^3
也就是说:对于每一位,n个元素,选1个元素此位为0,其余n-1个元素此位为1
对于每一位的每一个0,选择的可能为n个(只需要n个)
#include<bits/stdc++.h> using namespace std; using ll=long long; const ll p=1e9+7; ll qpow(ll a,ll x) { ll y=1ll; while(x>0) { if(x&1)y=y*a%p; a=a*a%p; x>>=1; } return y; } int main() { int t;cin>>t; while(t--) { ll n,k;cin>>n>>k; cout<<qpow(n,k)<<"\n"; } return 0; }
标签:CF1514B,qaq,int,Big,ll,元素,个数,Sum From: https://www.cnblogs.com/FeiShi/p/16745611.html