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. 洛谷 P2790 ccj与zrz之积木问题

    P2790 ccj与zrz之积木问题 题目背景 ccj和zrz无聊到了玩起了搭积木...(本题选自uva101,翻译来自<算法竞赛入门经典2>) 题目描述 从左到右有n个木块,编号从0到n ...

  2. amazeui学习笔记--css(常用组件13)--进度条Progress

    amazeui学习笔记--css(常用组件13)--进度条Progress 一.总结 1.进度条基本使用:进度条组件,.am-progress 为容器,.am-progress-bar 为进度显示信息 ...

  3. 编程——C语言的问题,堆栈

    堆和栈的区别一.预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结 ...

  4. 苹果手机wifi代理设置方法--用于抓包

    杯具了!@@@@@@@变态的公司不能直接上网了,但是经过我的研究.可以用代理上网,电脑是可以了,但是的iphone肿么办,哇咔咔,不要捉急,我来告诉你怎么让你的iphone通过代理上网.动起来吧. 请 ...

  5. 全面解析Activity的生命周期

    欢迎Follow我的GitHub, 关注我的CSDN. 在Android应用中, Activity是最重要的组件, 其生命周期(Lifecycle)被大家所熟知. 可是, 大家须要注意一些细节, 才干 ...

  6. (转)c++ 中的using namespace std是什么意思,什么时候用

    使用std命名空间 98年以后的c++语言提供一个全局的命名空间namespace,可以避免导致全局命名冲突问题.举一个实例,请注意以下两个头文件: // one.hchar func(char);c ...

  7. 【习题 3-2 UVA - 1586】Molar mass

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟. 主要是找那个数字. [代码] #include <bits/stdc++.h> using namespace ...

  8. 怎样自己构建一个小型的Zoomeye----从技术细节探讨到实现

     转载请注明出处:viewmode=list">http://blog.csdn.net/u011721501?viewmode=list 0.概述 Zoomeye是个网络空间的搜 ...

  9. 【LeetCode】【C++】Linked list cycle 2

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...

  10. oracle数据库未打开解决的方法

    Microsoft Windows [版本号 6.1.7601] 版权全部 (c) 2009 Microsoft Corporation.保留全部权利. C:\Users\Administrator& ...