Codeforces - “Or“ Game

tech2022-10-27  112

题目链接: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; }
最新回复(0)