BZOJ.2460.[BeiJing2011]元素(线性基 贪心)
线性基:https://blog.csdn.net/qq_36056315/article/details/79819714。
\(Description\)
求一组矿石,满足其下标异或和不为0,且价值和最大。
\(Solution\)
按价值从大到小依次插入线性基,这样最后得到的集合就是价值和最大的了。
贪心策略简单证明(参考:https://www.cnblogs.com/acmsong/p/7508022.html):
假设当前选取的集合\(S\)价值为\(\{v1,v2,...,vn\}\),标号为\(\{id1,id2,...,idn\}\)。所有物品中价值最大的为\(vMax\)(\(idMax\)),且当前集合中不包含\(vMax\).
那么\(vMax\)一定可以替换掉\(S\)中的某个元素,使得价值和更大。
如果不能直接插入\(vMax\),说明\(S∪\{1\}\)变得线性相关了,即\(S\)中一定存在一个子集,其下标的\(Xor\)和等于\(idMax\)。
即$$ id[x1]{\wedge}id[x2]{\wedge}...^{\wedge}id[xn]=id[Max] $$
然后\(id[Max]\)可以把任意一个元素替换掉,假设是\(x1\),那么两边同时异或\(id[Max]^{\wedge}id[x1]\):$$ id[Max]{\wedge}id[x2]{\wedge}...^{\wedge}id[xn]=id[x1] $$
这样就可以把\(id[x1]\)线性表示出来。而\(S\)中如果不加\(id[x1]\)的话是一定表示不出\(id[x1]\)的,因为\(S\)中异或和不为\(0\)(左边异或掉\(id[x1]\)是不等于\(id[x1]\)的)。
所以替换后的线性基和之前是等价的。
用拟阵能证,但是找不到啥详细的证明,我也没拿它证过啥别东西。。
写x&(1ll<<i)
的话别忘了1ll
...
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=1005;
LL base[69];
struct Node{
LL id; int val;
bool operator <(const Node &x)const{
return val>x.val;
}
}A[N];
inline LL read()
{
LL now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int main()
{
int n=read();
for(int i=1; i<=n; ++i) A[i].id=read(), A[i].val=read();
std::sort(A+1,A+1+n);
int ans=0;
for(int i=1; i<=n; ++i)
{
LL now=A[i].id;
for(int j=60; ~j; --j)
if(now&(1ll<<j))
if(base[j]) now^=base[j];
else {base[j]=now; break;}
if(now) ans+=A[i].val;
}
printf("%d\n",ans);
return 0;
}
BZOJ.2460.[BeiJing2011]元素(线性基 贪心)的更多相关文章
- BZOJ 2460: [BeiJing2011]元素 线性基
2460: [BeiJing2011]元素 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力 ...
- bzoj 2460 [BeiJing2011]元素 (线性基)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2460 题意: 给你一堆矿石,矿石有a,b两种性质,取任意个矿石,满足取得的这些矿石a性质异或 ...
- BZOJ 2460 [BeiJing2011]元素 ——线性基
[题目分析] 线性基,由于最多有63个,只需要排序之后,动态的去维护线性基即可. [代码] #include <cstdio> #include <cstring> #incl ...
- BZOJ 2460 [BeiJing2011]元素(线性基模板题)
Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石.一般地,矿石越多则法力越强 ...
- [bzoj2460] [BeiJing2011]元素(线性基+贪心)
题目大意: 有一些矿石,每个矿石有一个a和一个b值,要求选出一些矿石,b的和最大且不存在某个矿石子集它们的a的异或和为0. 解题关键:对魔力进行由大到小排序,依次加入线性基,统计即可. #includ ...
- BZOJ:2460[BeiJing2011]元素 (异或基+贪心)
2460: [BeiJing2011]元素 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2910 Solved: 1535 题目链接:https: ...
- BZOJ 2460 & 洛谷 P4570 [BJWC2011]元素 (线性基 贪心)
题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线 ...
- BZOJ 2460: [BeiJing2011]元素
2460: [BeiJing2011]元素 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 878 Solved: 470[Submit][Statu ...
- BZOJ-6-2460: [BeiJing2011]元素-线性基
链接 :https://www.lydsy.com/JudgeOnline/problem.php?id=2460 思路 :线性基不唯一,所以排序 进行贪心选择,价值最大的线性基, #include& ...
随机推荐
- util.promisify 的那些事儿
util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松. 在官方推出这个工具 ...
- oracle04--伪列
1. 伪列 1.1. 什么是伪列 伪列是在ORACLE中的一个虚拟的列. 伪列的数据是由ORACLE进行维护和管理的,用户不能对这个列修改,只能查看. 所有的伪列要得到值必须要显式的指定. 最常用的两 ...
- Sysmon + NXlog构建简单的windows安全监控
工具: Sysmon (sysmon 5.0) ,NXlog(nxlog-ce-2.9.1716.msi) . Sysmon监控系统并生成windows event log, NXlog将wind ...
- 【Nginx】 Nginx实现端口转发
什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口.此时如果我们可以通过 localhost:8001 //图书 loc ...
- python学习之argparse模块的使用
以下内容主要来自:http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html argparse ...
- sleep命令
sleep支持睡眠(分,小时) sleep 1 睡眠1秒 sleep 1s 睡眠1秒 sleep 1m 睡眠1分 sleep 1h 睡眠1小时
- QEMU漏洞挖掘
转载:https://www.tuicool.com/articles/MzqYbia qemu是一个开源的模拟处理器硬件设备的全虚拟化仿真器和虚拟器. KVM(kernel virtual mach ...
- 如何更方便的查看Linux内核代码的更新记录【转】
转自:http://blog.csdn.net/lee244868149/article/details/44302819 Linux内核的更新非常的快,如何快速的了解这些更新呢?最一般的办法就是把新 ...
- [How to] Phoenix 与 CDH5.4.2 HBase的整合
1.简介 Phoenix将SQL带回到了NOSQL的世界,其在HBase之上做了一个layer,客户端通过SQL调用Phoenix,Phoenix在转化为HBase客户算API进行访问HBase,其很 ...
- 使用mongoose操作mongodb数据库
1.如何启动mongodb数据库 参考地址:http://www.runoob.com/mongodb/mongodb-window-install.html 在数据库安装的地方,bin文件夹,输入 ...