time limit per test2 seconds

memory limit per test256 megabytes

inputstandard input

outputstandard output

You are given n numbers a1, a2, …, an. You can perform at most k operations. For each operation you can multiply one of the numbers by x. We want to make as large as possible, where denotes the bitwise OR.

Find the maximum possible value of after performing at most k operations optimally.

Input

The first line contains three integers n, k and x (1 ≤ n ≤ 200 000, 1 ≤ k ≤ 10, 2 ≤ x ≤ 8).

The second line contains n integers a1, a2, …, an (0 ≤ ai ≤ 109).

Output

Output the maximum value of a bitwise OR of sequence elements after performing operations.

Examples

input

3 1 2

1 1 1

output

3

input

4 2 3

1 2 4 8

output

79

Note

For the first sample, any possible choice of doing one operation will result the same three numbers 1, 1, 2 so the result is .

For the second sample if we multiply 8 by 3 two times we’ll get 72. In this case the numbers will become 1, 2, 4, 72 so the OR value will be 79 and is the largest possible result.

【题目链接】:http://codeforces.com/contest/579/problem/D

【题解】



显然,二进制位1最靠左的那个数字乘上数字会让最靠左的数字再靠左一点;

这样做是最优的策略;

但是

如果有多个数字二进制1最靠左,即最靠左的1相同;则不能随便选;

比如

1 0 0 0

1 0 1 1

1 1 0 1

这3个数字;

假设要乘的数字x是2;只能乘1次;

这三个数字依次是

8

11

13

如果把2乘最大的那个数字13

0 1 0 0 0

0 1 0 1 1

1 1 0 1 0

最后取or运算

结果为1 1 0 1 1

如果把2乘8

1 0 0 0 0

0 1 0 1 1

0 1 1 0 1

则再取or运算

结果为

1 1 1 1 1

显然后者更大;

所以不能单纯地就认为乘那个最大的数字就好了;

但如果最靠左的1的位置不是所有数字中最靠左的;那就不可能去乘它了;

所以乘了一次之后;肯定是继续去乘刚才乘的数字;

比如刚才的乘2之后变成了

1 0 0 0 0

0 1 0 1 1

0 1 1 0 1

显然继续让那个10000乘2是更优的;因为最高位移动一下幅度更大;

枚举要乘哪个数字、然后一直乘就可以了;

处理出前缀or和后缀or;预处理出x^k;x为要乘的数字;k为允许乘的次数

【完整代码】

#include <bits/stdc++.h>
#define LL long long using namespace std; const int MAXN = 20e4+100; int n,k,x;
LL a[MAXN],qz[MAXN],hz[MAXN]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
cin >> n >> k >> x;
for (int i = 1;i <= n;i++)
cin >> a[i];
for (int i = 1;i <= n;i++)
qz[i] = qz[i-1] | a[i];
for (int i = n;i >= 1;i--)
hz[i] = hz[i+1] | a[i];
LL temp = x;
for (int i = 1;i <= k-1;i++)
temp*=x;
LL ans = 0;
for (int i = 1;i <= n;i++)
{
LL temp1 = a[i]*temp;
ans = max(ans,qz[i-1] | temp1 | hz[i+1]);
}
cout << ans << endl;
return 0;
}

【21.37%】【codeforces 579D】"Or" Game的更多相关文章

  1. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  2. 【35.37%】【codeforces 556C】Case of Matryoshkas

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  3. 【81.37%】【codeforces 734B】Anton and Digits

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. 【21.21%】【codeforces round 382D】Taxes

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  5. 【21.58%】【codeforces 746D】Green and Black Tea

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  6. 【codeforces 757D】Felicity's Big Secret Revealed

    [题目链接]:http://codeforces.com/problemset/problem/757/D [题意] 给你一个01串; 让你分割这个01串; 要求2切..n+1切; 对于每一种切法 所 ...

  7. 【codeforces 757E】Bash Plays with Functions

    [题目链接]:http://codeforces.com/problemset/problem/757/E [题意] 给你q个询问; 每个询问包含r和n; 让你输出f[r][n]; 这里f[0][n] ...

  8. 【77.78%】【codeforces 625C】K-special Tables

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  9. 【30.23%】【codeforces 552C】Vanya and Scales

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

随机推荐

  1. iOS_04_数据类型、常量、变量

    一.数据 1.什么是数据 * 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据,图片数据,视频数据,还有聊天QQ产生的文 ...

  2. oled stm32的spi

    其实各种协议是很重要的,这篇文章就当做我对spi协议的一个整理吧. 必要的spi简介: https://www.cnblogs.com/zengsf/p/7221207.html?utm_source ...

  3. Altium Designer如何统一调整标号大小,在pcb环境下

  4. JS学习笔记 - fgm练习 - 输入法下拉框 三元表达式

    <script> window.onload = function() { var oBtn = document.getElementsByTagName('input')[0]; va ...

  5. Mybatis的使用中的一些不太注意的技巧

    以下就总结一下Mybatis的使用中的一些不太注意的技巧,算是Mybatis的总结笔 1.插入时主键返回 我们向数据库插入一条记录是,使用Mybatis的<insert>是无法返回插入的主 ...

  6. SpringMVC,采用的是SpringJDBC

    上一次复习搭建了SpringMVC+Mybatis,这次搭建一下SpringMVC,采用的是SpringJDBC,没有采用任何其他的ORM框 架,SpringMVC提供了一整套的WEB框架,所以如果想 ...

  7. @RequestMapping value 能够反复吗 [

    @RequestMapping value 能够反复吗 [问题点数:40分,结帖人wangqiao4j] 不显示删除回复显示全部回复 显示星级回复显示得分回复 仅仅显示楼主 u=http://bbs. ...

  8. iOS_02_什么是ios开发

    什么是ios开发? * 已知:ios是iphone,ipad等手持设备操作系统. * ios开发就是开发运行在ios系统上的应用或者游戏软件,比如手机QQ,微博或者游戏,说白了,就是开发手机软件:当然 ...

  9. ES权威指南1

    Elasticsearch学习笔记 一 本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws. 本文参考和学习资料 <ES权威指南> ...

  10. ANSCII码和BCD码互转

    bool AtoBCD(unsigned char* Asc,unsigned char* BCD,int len) { int i; unsigned char ch; //高位 unsigned ...