bzoj4245 [ONTAK2015]OR-XOR (贪心)
4245: [ONTAK2015]OR-XOR
从最高位贪心,判断每一位时加上高位的限制(某些位是否全为\(0\))即可;
因为段内是异或运算,所以两个满足限制的段合并后仍满足限制;
然后就变成了判断每一位能否分成不少于\(m\)个满足限制且这一位异或和为\(0\)的段;
AC GET☆DAZE
#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<bitset>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#define N 500039
#define mod 20070831
#define inf 0x3f3f3f3f
#define ll long long
using namespace std;
int n,m,cnt;
ll num[N],now,ans;
int main()
{
scanf("%d%d",&n,&m);
for(int a=1;a<=n;a++)
{
scanf("%lld",&num[a]);
}
for(int a=60;~a;a--)
{
cnt=now=0;
for(int b=1;b<=n;b++)
{
now^=num[b];
if((now>>(a+1)<<(a+1)|ans)==ans && !(now>>a&1))
{
cnt++,now=0;
}
}
if(cnt<m || now) ans|=(1ll<<a);
}
printf("%lld",ans);
return 0;
}
散りぬべき 時知りてこそ 世の中の 花も花なれ 人も人なれ