题目链接:Codeforces - “Or” Game
因为 x >= 2,所以每次乘法都会使得最高位至少左移1位。
根据贪心,我们一定是让最高位越高越好,所以一定是一个数字乘以k次。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
using namespace std
;
const int N
=2e5+10;
int n
,k
,x
,a
[N
],suf
[N
],pre
[N
],res
;
signed main(){
cin
>>n
>>k
>>x
;
for(int i
=1;i
<=n
;i
++) scanf("%lld",&a
[i
]),pre
[i
]=a
[i
]|pre
[i
-1];
for(int i
=n
;i
>=1;i
--) suf
[i
]=suf
[i
+1]|a
[i
];
for(int i
=1;i
<=n
;i
++){
int tmp
=a
[i
];
for(int j
=1;j
<=k
;j
++) tmp
*=x
;
res
=max(res
,tmp
|pre
[i
-1]|suf
[i
+1]);
}
cout
<<res
;
return 0;
}