• bzoj4245: [ONTAK2015]OR-XOR


    一道很有意思的题目。

    先求一次前缀和,可以发现答案是 (sum[0] xor sum[x1])or(sum[x1] xor sum[x2])or(sum[x2] xor sum[x3])or……or(sum[m-1] xor sum[n])

    然后其实(a xor b)or b =a or b

    那么sum[0]=0,可以把柿子变成 sum[x1] or sum[x2] or …… or sum[m-1] or sum[n]

    问题就变成取m-1个数,使和sum[n]它们or起来最小

    从高位往低位贪心即可

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    LL s[510000];
    bool v[510000];
    int main()
    {
        int n,m;LL x;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            scanf("%lld",&x), s[i]=s[i-1]^x;
        
        m--;LL ans=s[n];
        memset(v,true,sizeof(v));
        for(int i=62;i>=0;i--)
        {
            if((ans&(1LL<<i))==0)
            {
                int sum=0;
                for(int j=1;j<n;j++)
                    if(v[j]==true)
                        if((s[j]&(1LL<<i))==0)sum++;
                if(sum>=m)
                {
                    for(int j=1;j<n;j++)
                        if(v[j]==true)
                            if((s[j]&(1LL<<i))>0)v[j]=false;
                }
                else ans|=(1LL<<i);
            }
        }
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    UPD通信
    异常处理
    网络编程-套接字(socket)
    数据分析(一)
    爬虫存储库之mongodb数据库(四)
    爬虫请求库selenium(三)
    爬虫解析库beautifulsoup(二)
    爬虫简介与request库(一)
    flask框架数据库之SQLAlchemy
    flask框架(四)
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/8945163.html
Copyright © 2020-2023  润新知