题目链接

BZOJ4245

题解

套路①
位运算当然要分位讨论,高位优先
考虑在\(or\)下,如果该位为\(0\),则每一位都为\(0\)

套路②
我们选m段异或和,转化为\(m\)个前缀和的点,且其中有一个是\(n\)

容易发现,该位结果要为0,则选取的前缀和该位都为\(0\)
所以贪心查找所有该位为\(0\)的,首先第\(n\)个前缀和一定要为\(0\),如果其它满足有至少\(m - 1\)个,那么该位答案为\(0\),剩余为\(1\)的打上标记不能选
如果不够,那这一位就没办法了,直接放弃

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 500005,maxm = 100005,INF = 1000000000;
inline LL read(){LL out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
int n,m,tag[maxn];
LL a[maxn],ans;
int main(){n = read(); m = read();REP(i,n) a[i] = read() ^ a[i - 1];for (LL i = 1ll << 61; i; i >>= 1){if (a[n] & i){ans += i;continue;}int cnt = 1;for (int j = 1; j < n; j++)if (!tag[j] && !(a[j] & i)) cnt++;if (cnt >= m){for (int j = 1; j < n; j++)if (!tag[j] && (a[j] & i))tag[j] = true;}else ans += i;}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/9094057.html

BZOJ4245 [ONTAK2015]OR-XOR 【贪心】相关推荐

  1. bzoj4245: [ONTAK2015]OR-XOR

    一道很有意思的题目. 先求一次前缀和,可以发现答案是 (sum[0] xor sum[x1])or(sum[x1] xor sum[x2])or(sum[x2] xor sum[x3])or--or( ...

  2. BZOJ4245 : [ONTAK2015]OR-XOR

    按位考虑,逐步确定答案. 设当前是第i位,求出第i位的前缀异或和. 若存在m个0且所有数字异或和为0,那么答案的这一位可以为0,并把所有1的位置给标记为不可选. 否则答案的这一位只能是1. 时间复杂度 ...

  3. 2019.4.summary

    2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...

  4. 【BZOJ-4245】OR-XOR 按位贪心

    4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 486  Solved: 266 [Submit][S ...

  5. HDU多校1 - 6955 Xor sum(字典树+贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,要求找到一段长度最短的区间,使得异或和大于等于 kkk,如果有多种答案,输出左端点最小的那个 题目分析:倒着维护一下后缀异或和,将后缀异或 ...

  6. HDU - 6955 Xor sum tire树 + 贪心

    传送门 文章目录 题意: 思路: 题意: 给你一个数列aaa,你需要找出来一个长度最小且左端点最靠前的区间,使其异或和≥k\ge k≥k. n≤1e5,0≤ai,k<230n\le1e5,0\l ...

  7. D. Little Girl and Maximum XOR(贪心)

    题目链接---- 题目大意是给你[l , r ] 这个区间,然后让你找这个区间中两个数的异或的最大值,范围1e18. 思路:找两个数异或最大,似乎可以用Trie树来解决.但是这个数据范围肯定会爆内存了 ...

  8. E. XOR Inverse(Trie贪心)

    E. XOR Inverse(Trie&贪心) 思路:异或Trie+Trie+Trie+贪心. 考虑一个性质:两个数的大小只需比较其最高位. 因此考虑将数的每位从高到低存入字典树,显然一个结点 ...

  9. 【NWPU2018 练着玩】入门班day1 枚举贪心[Cloned] F - Claris and XOR (HDU-5661 Claris and XOR )

    题目链接:https://vjudge.net/contest/246949#problem/F 先参考大佬的博客: https://blog.csdn.net/idealism_xxm/articl ...

最新文章

  1. 如何做好网站项目需求分析?
  2. Python 一种接触就容易爱上的语言二
  3. STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)
  4. mysql安装后无法启动和连接问题
  5. 计算机九大核心课程,九大变化,透析IB(国际文凭)课程发展趋势
  6. git 入门教程之 git 私服搭建教程
  7. 华为系列设备优先级总结(三)
  8. 看不到日志_迷之 crontab 异常:不运行、不报错、无日志?
  9. c语言文本作图输出爱心,C语言程序设计——文本作图简案(3页)-原创力文档...
  10. wget: unable to resolve host address的解决方法
  11. Windows用户远程访问内网共享文件(免费内网穿透)
  12. 局域网内建网站教程,如何零成本搭建自己的网站?
  13. 为自己加油!--ThoughtWorks面试后感
  14. 离职半年了,老东家又发 offer,回不回?
  15. 哪些浏览器支持html5?
  16. Android的鼠标事件流向
  17. 新概念二册 Lesson 45 A clear conscience问心无愧(复习被动语态+过去完成时被动语态)
  18. 感知机之UCI声呐数据判断物体
  19. python远程方法调用_Python远程方法调用 RPyC
  20. 国内、国外遥感卫星简介及分辨率参数

热门文章

  1. 【第一季】CH07_FPGA_RunLED创建VIVADO工程实验
  2. 教你学会Sql中 ROW_NUMBER的用法
  3. Elasticsearch聚合 之 Date Histogram聚合
  4. FindFirstVolume系列函数遍历驱动器,获取驱动器信息
  5. RaySync 传输协议的有效带宽利用率分析介绍
  6. ActiveMQ消息传送机制以及ACK机制详解
  7. 图片序列化和反序列化成图片文件(代码)
  8. MPMovieplayercontroller
  9. 情怀成驱动力 网游改编手游能火多久?
  10. 我更喜欢用 Intellij IDEA 部署应用