首页 > 其他 > 详细

BZOJ 4245 OR-XOR

时间:2016-09-16 21:16:31      阅读:130      评论:0      收藏:0      [点我收藏+]

按位贪心。

前缀异或和没话说。一位为0当且仅当这一位有m个0,且第n个数这一位为0。

如果这一位可以为0,那么所有这一位为1的数以后都不能选。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 500050
using namespace std;
long long n,m,a[maxn],ans=0,table[70];
bool vis[maxn];
void get_table()
{
    table[0]=1;
    for (long long i=1;i<=63;i++)
        table[i]=table[i-1]*2;
}
int main()
{
    get_table();
    scanf("%lld%lld",&n,&m);
    for (long long i=1;i<=n;i++) scanf("%lld",&a[i]);
    for (long long i=1;i<=n;i++) a[i]^=a[i-1];    
    for (long long i=63;i>=0;i--)
    {
        long long ret=0;
        for (long long j=1;j<=n-1;j++)
        {
            long long bit=a[j]&table[i];
            if ((!(a[j]&table[i])) && (!vis[j]))
                ret++;
        }
        if ((ret>=m-1) && (!(a[n]&table[i])) && (!vis[n]))
        {
            for (long long j=1;j<=n;j++)
            {
                if (a[j]&table[i])
                    vis[j]=true;
            }
        }
        else ans|=table[i];
    }
    printf("%lld\n",ans);
    return 0;
}

 

BZOJ 4245 OR-XOR

原文:http://www.cnblogs.com/ziliuziliu/p/5877182.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!