4245: [ONTAK2015]OR-XOR
4245: [ONTAK2015]OR-XOR
https://www.lydsy.com/JudgeOnline/problem.php?id=4245
/*
要求分成m份,总价值为a1|a2|a3...,总价值最小,ai为第i份的异或和。 首先预处理异或和。
根据贪心的思想,高位最好是0。
于是从高位往低位枚举,看一下每一位是否可以为0。
如果当前这一位可以为0,每一份的(异或和)(或)起来都是0,所以每一份异或和的这一位不能有1
那么一个点可以成为分割点当且仅当这个点的sum值的这一位为0,然后统计有多少个点的sum为0
如果个数>=m且这一位上的所有1为偶数个(sum[n]&(1LL<<i)==0),那么这一位可以为0,然后对于那些不能成为分割点的点,标记不能再成为分割点。
不然会使这一位不为0了。
如果不能0,那就为1了,ans更新。
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long LL; inline LL read() {
LL x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for (;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
LL a[N],sum[N],flag[N]; int main() {
int n,m;cin >> n >> m;
for (int i=; i<=n; ++i)
a[i] = read(),sum[i] = sum[i-] ^ a[i];
LL ans = ;
for (int i=; i>=; --i) { // 看第i位能否为0
int cnt = ;
for (int j=; j<=n; ++j) { // 统计有多少个右端点满足条件
if (!flag[j] && (sum[j]&(1LL<<i))==) cnt++;
}
if (cnt >= m && (sum[n]&(1LL<<i))==) { // 如果这一位可以放0。---- 少加了对花括号。。。
for (int j=; j<=n; ++j) // 对所有不可以成为右端点的点打标记
if ((sum[j]&(1LL<<i)) != ) flag[j] = ;
}
else ans |= (1LL << i);
}
cout << ans;
return ;
}
4245: [ONTAK2015]OR-XOR的更多相关文章
- BZOJ 4245: [ONTAK2015]OR-XOR
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 492 Solved: 269[Submit][Sta ...
- 【BZOJ】4245: [ONTAK2015]OR-XOR
题意 给定一个长度为\(n(1 \le n \le 500000)\)的序列\(a_i(0 \le a_i \le 10^{18})\),将它划分为\(m(1 \le m \le n)\)段连续的区间 ...
- BZOJ.4245.[ONTAK2015]OR-XOR(贪心)
题目链接 从高到低位贪心,判断答案的该位能否为0. 求一个前缀和sum.对于最高位,答案的这一位可以为0当且仅当至少存在m个位置满足sum[i]在这一位上为0. 注意sum[n]这一位必须为0. 如果 ...
- bzoj 4245: [ONTAK2015]OR-XOR【按位贪心】
知道按位贪心但是不知道怎么贪-- 求一个a的异或前缀和s,然后按位从大到小贪心,ans的当前位能为0的条件是s中有>=m个位置这一位为0且没有flag,并且s[n]的这一位为0 如果符合要求,那 ...
- BZOJ 4245: [ONTAK2015]OR-XOR 贪心 + 位运算
Description 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or ...
- 【BZOJ-4245】OR-XOR 按位贪心
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 486 Solved: 266[Submit][Sta ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ4245 ONTAK2015 OR-XOR 【位运算+贪心】*
BZOJ4245 ONTAK2015 OR-XOR Description 给定一个长度为n的序列a[1],a[2],…,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的 ...
- 【BZOJ4245】[ONTAK2015]OR-XOR 贪心
[BZOJ4245][ONTAK2015]OR-XOR Description 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所 ...
随机推荐
- NO.012-2018.02.17《题都城南庄》唐代:崔护
题都城南庄_古诗文网 题都城南庄 唐代:崔护 去年今日此门中,人面桃花相映红.去年春天,就在这扇门里,姑娘脸庞,相映鲜艳桃花.人面:指姑娘的脸.第三句中“人面”指代姑娘. 人面不知何处去,桃花依旧笑春 ...
- Github 删除 repository
Github 删除 repository 如下图操作
- 记录一次Git问题及其解决方案
错误信息:fatal: refusing to merge unrelated histories 错误产生背景:我将原先测试的项目本地删除后提交,然后将新的项目按照git的提交步骤进行提交,在最后一 ...
- 两种方式(xml+代码)构建SqlSessionFactory+完整实现
首先创建类.接口.数据库: entity包下Admin类: package com.wbg.springJavaConfig.entity; public class Admin { private ...
- POJ 3216 Prime Path(打表+bfs)
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27132 Accepted: 14861 Desc ...
- ARM v7-A 系列CPU的MMU隐射分析
ARM v7-A 系列CPU的MMU隐射分析 摘要:ARM v7-A系列的CPU加入了很多扩展,如多核处理器扩展.大物理地址扩展.TrustZone扩展.虚拟化扩展.若支持大的物理地址,则必须支持多核 ...
- HttpClient请求地址并携带参数
废话不多,直接上代码! /** * * @param httpUrl * @param reqInfo * @return */ public static StringBuffer sendPost ...
- 【2017001】IList转DataTable、DataTable转IList
IList转DataTable.DataTable转IList using System; using System.Collections.Generic; using System.Compone ...
- Appstore|IPA
ios提审报错:No suitable application records were found. Verify your bundle identifier 'xx' is correct - ...
- #leetcode刷题之路35-搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置.你可以假设数组中无重复元素. 示例 1:输入: [1,3,5,6], 5输出: ...