CF 578B "Or" Game
2024-09-06 11:52:45
解题思路
题意大概是给你一个数列,可以进行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;
}
最新文章
- EXCEL中多级分类汇总空白字段填充
- 【转】jqGrid 各种参数 详解
- webdriver 获取alert 提示no alert is active
- IIS负载均衡(转)
- jquery 绑定事件的方法
- 【Count and Say】cpp
- C# 之 反射
- eclipse 必备
- WebResponse 取出全国省市区的邮编
- mvc 相关js
- 分享SVN的钩子代码[借鉴学习]pre-commit-post 钩子
- C++在使用Qt中SLOT宏需要注意的一个小细节
- Sql Server远程查询db 表中的数据,以本地
- mybatis generator工具的使用
- 【转】2019年3月 最新win10激活密匙 win10各版本永久激活序列号 win10正式版激活码分享
- [Web 前端] 你不知道的 React Router 4
- 字符集(编码)转换_Qt532_QString
- Java 中类的初始化过程
- RK3288 双屏异显,两屏默认方向不一致
- 【bzoj4002】有意义的字符串
热门文章
- 线性回归代码实现(matlab)
- angular 级联选择
- openSUSE 安装LAMP记录
- Linux命令查看文件内容
- springboot+mybatis+达梦数据库
- 安装zabbix需要php的两个模块php-bcmath和php-mbstring(转)
- 服务安全-JWT(JSON Web Tokens):百科
- 《DSP using MATLAB》Problem 8.2
- Mybatis-SqlSessionFactoryBuilder,SessionFactory与SqlSession的并发控制
- mybatis第二篇—参数绑定