zoukankan      html  css  js  c++  java
  • Codeforces 578B. "Or" Game(思维题)

      我们知道所有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
    ", ans);
    }
    View Code
  • 相关阅读:
    boost库:函数对象
    boost库:智能指针
    linux 查看和修改文件时间
    linux正则表达式
    UVA
    UVA
    UVA
    UVA
    UVA
    对JavaScript的认识?
  • 原文地址:https://www.cnblogs.com/Sakits/p/8003719.html
Copyright © 2011-2022 走看看