题意:一组数共有k次机会对某个ai乘上x,问 或运算的值最大是多少
或运算的两个基本性质 a|b>=max(a,b) a|0=a
对于两个数 a>b 则有2a|b >= 2b|a 即二进制位数越长或运算越大
预处理一下
用p[i]表示前i个值的或运算
q[i]表示后i个
#include<iostream>
using namespace std;
long long n,k,x;
long long p[200005],q[200005],a[200005];
int main()
{
cin>>n>>k>>x;
for(int i=1;i<=n;i++)
{
cin>>a[i];
p[i]= p[i-1]|a[i];
}
for(int i=n;i>=1;i--)
{
q[i]= q[i+1]|a[i];
}
long long maxn=-1;
for(int i=1;i<=n;i++)
{
long long temp=a[i];
for(int j=0;j<k;j++)
{
temp*=x;
}
temp=temp|p[i-1]|q[i+1];
maxn=max(maxn,temp);
}
cout<<maxn<<endl;
}