Description

给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or ... or c[m]。请求出总费用的最小值。

Input

第一行包含两个正整数n,m(1<=m<=n<=500000),分别表示序列的长度和需要划分的段数。
第一行包含n个整数,其中第i个数为a[i](0<=a[i]<=10^18)。

Output

输出一个整数,即总费用的最小值。

Sample Input

3 2
1 5 7

Sample Output

3

HINT

第一段为[1],第二段为[5 7],总费用为(1) or (5 xor 7) = 1 or 2 = 3。

Solution

有点鬼畜的贪心……其实也不算难……

我们从高到低位枚举答案,$check$一下答案这一位是否能够为$0$。因为是按位贪心,所以肯定是高位能填$0$优先填$0$然后再考虑后面。接下来问题就在于$check$怎么写了。

很显然对于前面答案选了$0$的位置,会在我们后面$check$的时候产生一定限制,我们把它存到一个变量$lim$里面。前面答案选了$1$的位置我们可以把它直接算到变量$ans$里面。

$check$的时候,从头到尾开始扫,一个一个往里加数异或起来。直到加到满足前面的限制而且也满足当前贪心位为$0$的时候,就可以把这一段拿出来了。如果最后能完整的拿出大于等于$m$段的话就$return~true$,否则$return~false$。

Code

 #include<iostream>
#include<cstdio>
#define N (500009)
#define LL long long
using namespace std; LL n,m,ans,lim,a[N]; bool check(int x)
{
LL now=,cnt=;
for (int i=; i<=n; ++i)
{
now^=a[i];
if (!(now&lim) && !(now&(1ll<<x-))) now=, ++cnt;
}
return (cnt>=m && !now);
} int main()
{
scanf("%lld%lld",&n,&m);
for (int i=; i<=n; ++i)
scanf("%lld",&a[i]);
for (int i=; i>=; --i)
if (!check(i)) ans|=(1ll<<i-);
else lim|=(1ll<<i-);
printf("%lld\n",ans);
}

BZOJ4245:[ONTAK2015]OR-XOR(贪心)的更多相关文章

  1. BZOJ4245 ONTAK2015 OR-XOR(贪心)

    贪心的按位考虑.如果所有数在某一位上有奇数个为1,显然无论如何划分这一位最终都会为1:否则将每一部分都划分为偶数个1就能保证最终该位为0,可以标记上哪些位置可以作为划分点(当然也要满足之前可为0的位上 ...

  2. BZOJ4245 [ONTAK2015]OR-XOR 【贪心】

    题目链接 BZOJ4245 题解 套路① 位运算当然要分位讨论,高位优先 考虑在\(or\)下,如果该位为\(0\),则每一位都为\(0\) 套路② 我们选m段异或和,转化为\(m\)个前缀和的点,且 ...

  3. BZOJ4245 ONTAK2015 OR-XOR 【位运算+贪心】*

    BZOJ4245 ONTAK2015 OR-XOR Description 给定一个长度为n的序列a[1],a[2],…,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的 ...

  4. ACM学习历程—CSU 1216 异或最大值(xor && 贪心 && 字典树)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1216 题目大意是给了n个数,然后取出两个数,使得xor值最大. 首先暴力枚举是C(n,  ...

  5. Poj 3764 The xor-longest Path(Trie树+xor+贪心)

    The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6455 Accepted: 1392 ...

  6. CodeForces 276D – Little Girl and Maximum XOR 贪心

    整整10个月后第二次搞这个问题才搞懂........第一次还是太随意了. 解题思路: 经过打表可得规律答案要么是0 要么是2的N次 - 1 要得到最大的XOR值,其值一定是2的N次 - 1 即在 l ...

  7. [bzoj4245][ONTAK2015]OR-XOR

    来自FallDream的博客,未经允许,请勿转载,谢谢. 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费 ...

  8. HDU 5661 Claris and XOR 贪心

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5661 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

  9. BZOJ4245: [ONTAK2015]OR-XOR(前缀和)

    题意 题目链接 Sol 又是一道非常interesting的题目 很显然要按位考虑 因为最终答案是xor之后or,所以分开之后之后这样位上1的数量是一定是偶数,否则直接加到答案里面 同时,这里面有些部 ...

随机推荐

  1. aspnetmvc和aspnetcoremvc的一些区别

    1.路由 控制器添加特性:  [RoutePrefix("api/controller")]  = >   [Route("api/[controller]&quo ...

  2. 配置Windows 防火墙,允许SQL Server的远程连接

    在运行SQL Server的服务器上,我们要找到哪些是SQL Server正在侦听的端口,并将其添加到Windows防火墙的入站例外. 首先,我们需要添加 SQL Server 服务侦听 Window ...

  3. ADO.NET 【属性扩展】性别、年龄、编号

    1.性别属性扩展 private bool _Sex; //成员变量 public bool Sex // 属性 { get { return _Sex; } set { _Sex = value; ...

  4. Go 语言相关的优秀框架,库及软件列表

    If you see a package or project here that is no longer maintained or is not a good fit, please submi ...

  5. mongodb命令(持续更新)

    $lt $lte $gt $gte< . <= . > . >= 1.分组求和db.collection.aggregate([{$group : {_id : null, s ...

  6. jQuery 自动触发事件的坑

    有时候项目需求页面加载完后,需要模拟用户操作,自动点击按钮.Jquery中可以使用trigger()方法模拟事件. $(selector).trigger(event,[param1,param2,. ...

  7. Linux 安装Python虚拟环境,virtualenvwrapper

    virtualenvwrapper工具学习 1.因为virtualenv 工具使用的并不方便 2.安装virtualenvwrapper pip3 install -i https://pypi.do ...

  8. CSS实现英文或拼音单词首字母大写

    CSS实现英文或拼音单词首字母大写,只需要在css样式中加入: text-transform: capitalize 即可. 测试代码如下: <!doctype html> <htm ...

  9. Asp Url汉字乱码的问题

    1.js <a target="_blank" href="/asp/download.asp?File=' + escape(item.FileName) + ' ...

  10. 1.print()与input()

    hello world必备->print函数 print(): 作用: 打印函数,打印数据到屏幕中 参数列表: print(value, ..., sep=' ', end='\n', file ...