传送门

解题思路

题意大概是给你一个数列,可以进行k次操作,每次操作可以选择一个数乘x,问操作后的或的最大值。根据位运算,位数越高答案越优,所以贪心的使这k次操作全都放到一个数上,这样的结果肯定较优。之后算一个原数列的前缀or和与后缀or和,枚举每一个数使其乘x^k并更新答案。后缀or和的思想非常巧妙。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std;
const int MAXN = 200005;
typedef long long LL; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
} int n,k,x,a[MAXN];
LL ans,sum1[MAXN],sum2[MAXN]; //sum1表示前缀异或和,sum2表示后缀 inline LL fast_pow(int a,int b){
LL ret=1;
for(;b;b>>=1){
if(b&1) ret*=a;
a*=a;
}
return ret;
} int main(){
n=rd();k=rd();x=rd();
for(register int i=1;i<=n;i++){
a[i]=rd();
sum1[i]=(sum1[i-1]|a[i]);
}
for(register int i=n;i;i--) sum2[i]=(a[i]|sum2[i+1]);
LL mx=fast_pow(x,k);
for(register int i=1;i<=n;i++)
ans=max(ans,(LL)a[i]*mx|sum1[i-1]|sum2[i+1]);
printf("%lld",ans);
return 0;
}

最新文章

  1. EXCEL中多级分类汇总空白字段填充
  2. 【转】jqGrid 各种参数 详解
  3. webdriver 获取alert 提示no alert is active
  4. IIS负载均衡(转)
  5. jquery 绑定事件的方法
  6. 【Count and Say】cpp
  7. C# 之 反射
  8. eclipse 必备
  9. WebResponse 取出全国省市区的邮编
  10. mvc 相关js
  11. 分享SVN的钩子代码[借鉴学习]pre-commit-post 钩子
  12. C++在使用Qt中SLOT宏需要注意的一个小细节
  13. Sql Server远程查询db 表中的数据,以本地
  14. mybatis generator工具的使用
  15. 【转】2019年3月 最新win10激活密匙 win10各版本永久激活序列号 win10正式版激活码分享
  16. [Web 前端] 你不知道的 React Router 4
  17. 字符集(编码)转换_Qt532_QString
  18. Java 中类的初始化过程
  19. RK3288 双屏异显,两屏默认方向不一致
  20. 【bzoj4002】有意义的字符串

热门文章

  1. 线性回归代码实现(matlab)
  2. angular 级联选择
  3. openSUSE 安装LAMP记录
  4. Linux命令查看文件内容
  5. springboot+mybatis+达梦数据库
  6. 安装zabbix需要php的两个模块php-bcmath和php-mbstring(转)
  7. 服务安全-JWT(JSON Web Tokens):百科
  8. 《DSP using MATLAB》Problem 8.2
  9. Mybatis-SqlSessionFactoryBuilder,SessionFactory与SqlSession的并发控制
  10. mybatis第二篇—参数绑定