Codeforces 578B. "Or" Game(思维题)
2017-12-08 07:18
405 查看
我们知道所有sigma(2^i){i<n}比2^n小,所以我们肯定是把这k次操作全部丢到一个数上看看能不能凑出二进制下一个更高位的1。
因为k最大只有10,我们可以求出每一个数乘以k次之后的值,然后记录一下前缀或和 后缀或和,枚举每一个数作为被乘数,前缀或当前数或后缀得出答案。
#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm> #define ll long long using namespace std; const int maxn=500010; ll n, k, x; ll a[maxn], b[maxn], qzh[maxn], hzh[maxn], ans; void read(ll &k) { int f=1; k=0; char c=getchar(); while(c<'0' || c>'9') c=='-' && (f=-1), c=getchar(); while(c<='9' && c>='0') k=k*10+c-'0', c=getchar(); k*=f; } int main() { read(n); read(k); read(x); for(int i=1;i<=n;i++) { read(a[i]); b[i]=a[i]; for(int j=1;j<=k;j++) b[i]*=x; qzh[i]=qzh[i-1]|a[i]; } for(int i=n;i;i--) hzh[i]=hzh[i+1]|a[i]; for(int i=1;i<=n;i++) ans=max(ans, qzh[i-1]|b[i]|hzh[i+1]); printf("%I64d\n", ans); }View Code
相关文章推荐
- 浙工大姗姗杯round1 A - "Or" Game |CodeForces - 578B
- codeforces - 578B - "Or" Game
- Codeforces 578B "Or" Game
- codeforces 579D D. "Or" Game(前后缀+贪心)
- CodeForces - 578B "Or" Game
- 【Codeforces 578B】【贪心】"Or" Game
- Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] -- B. "Or" Game (容斥定理)
- Codeforces 428(div 2)B. Game of the Rows(思维题)
- A - "Or" Game
- 【21.37%】【codeforces 579D】"Or" Game
- Codeforces Round #320 (Div. 1) B. "Or" Game
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] D "Or" Game 枚举+前缀后缀
- Codeforces 272C Dima and Staircase 思维 or 线段树
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] -- D. "Or" Game
- cf#320 Div.2 Problem D "Or" Game
- The Meaningless Game 【codeforces】【思维】
- Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] B. "Or" Game 线段树贪心
- CF 578B "Or" Game
- Codeforces Round #320 (Div. 2)D. "Or" Game
- cf#320 Div.2 Problem D "Or" Game