Description

相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术。那时人们就认识到,一个法杖的法力取决于使用的矿石。
一般地,矿石越多则法力越强,但物极必反:有时,人们为了获取更强的法力而使用了很多矿石,却在炼制过程中发现魔法矿石全部消失了,从而无法炼制出法杖,这个现象被称为“魔法抵消” 。特别地,如果在炼制过程中使用超过一块同一种矿石,那么一定会发生“魔法抵消”。后来,随着人们认知水平的提高,这个现象得到了很好的解释。经过了大量的实验后,著名法师 Dmitri 发现:如果给现在发现的每一种矿石进行合理的编号(编号为正整数,称为该矿石的元素序号),那么,一个矿石组合会产生“魔法抵消”当且仅当存在一个非空子集,那些矿石的元素序号按位异或起来为零。(如果你不清楚什么是异或,请参见下一页的名词解释。 )例如,使用两
个同样的矿石必将发生“魔法抵消”,因为这两种矿石的元素序号相同,异或起来为零。 并且人们有了测定魔力的有效途径,已经知道了:合成出来的法杖的魔力
等于每一种矿石的法力之和。人们已经测定了现今发现的所有矿石的法力值,并且通过实验推算出每一种矿石的元素序号。
 现在,给定你以上的矿石信息,请你来计算一下当时可以炼制出的法杖最多有多大的魔力。

Input

第一行包含一个正整数N,表示矿石的种类数。
  接下来 N行,每行两个正整数Numberi 和 Magici,表示这种矿石的元素序号
和魔力值。

Output

仅包一行,一个整数:最大的魔力值

Sample Input

3
1 10
2 20
3 30

Sample Output

50

HINT

由于有“魔法抵消”这一事实,每一种矿石最多使用一块。

如果使用全部三种矿石,由于三者的元素序号异或起来:1 xor 2 xor 3 = 0 ,

则会发生魔法抵消,得不到法杖。

可以发现,最佳方案是选择后两种矿石,法力为 20+30=50。

对于全部的数据:N ≤ 1000,Numberi ≤ 10^18,Magici ≤ 10^4。

Source

Day2

 
 
正解:线性基+贪心
解题报告:
  今天考试考了线性基,加之昨天做的一道题(也就是今天考试的T3)也是线性基,所以还是特地刷几道题练一下。
  显然这道题可以用线性基来维护一个我们选取的非空子集中不存在异或出0的情况,但是我们还需要得到的权值最大,那么直接对于每件物品按权值排序,按权值从大到小插入到线性基中就可以保证得到的线性基中的元素是权值之和最大的。
 
 1 //It is made by jump~
 2 #include <iostream>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <cstdio>
 6 #include <cmath>
 7 #include <algorithm>
 8 #include <ctime>
 9 #include <vector>
10 #include <queue>
11 #include <map>
12 #include <set>
13 using namespace std;
14 typedef long long LL;
15 const int MAXN = 1011;
16 int n;
17 LL ans,p[64];
18 struct thing{
19     int w;
20     LL id;
21 }a[MAXN];
22
23 inline int getint()
24 {
25        int w=0,q=0; char c=getchar();
26        while((c<'0' || c>'9') && c!='-') c=getchar(); if(c=='-') q=1,c=getchar();
27        while (c>='0' && c<='9') w=w*10+c-'0', c=getchar(); return q ? -w : w;
28 }
29 inline LL getlong()
30 {
31        LL w=0,q=0; char c=getchar();
32        while((c<'0' || c>'9') && c!='-') c=getchar(); if(c=='-') q=1,c=getchar();
33        while (c>='0' && c<='9') w=w*10+c-'0', c=getchar(); return q ? -w : w;
34 }
35 inline bool cmp(thing q,thing qq){ return q.w>qq.w; }
36
37 inline void work(){
38     n=getint();  for(int i=1;i<=n;i++) a[i].id=getlong(),a[i].w=getint();
39     sort(a+1,a+n+1,cmp);//贪心地插入到线性基当中,权值越大的贡献越大,所以如果能插入线性基当中越早越好
40     for(int i=1;i<=n;i++) {
41     for(int j=62;j>=0;j--) {
42         if(!(a[i].id>>j)) continue;//对线性基的这一位没有贡献
43         if(!p[j]) { p[j]=a[i].id; break; }//选入线性基中
44         a[i].id^=p[j];
45     }
46     if(a[i].id!=0) ans+=a[i].w;
47     }
48     printf("%lld",ans);
49 }
50
51 int main()
52 {
53   work();
54   return 0;
55 }

转载于:https://www.cnblogs.com/ljh2000-jump/p/5868888.html

BZOJ2460 [BeiJing2011]元素相关推荐

  1. BZOJ2460: [BeiJing2011]元素(线性基+贪心)

    BZOJ2460: [BeiJing2011]元素 Time Limit: 20 Sec Memory Limit: 128 MB Description 相传,在远古时期,位于西方大陆的 Magic ...

  2. [BZOJ2460][BeiJing2011]元素

    Time Limit: 20 Sec Memory Limit: 128 MB Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技 ...

  3. bzoj2460: [BeiJing2011]元素

    怕不是学了个假的线性基...一直以为要高位到低位插入,结果那个是高斯消元的线性基... 那么直接排序权值就行了. #include<cstdio> #include<iostream ...

  4. bzoj2460 [BeiJing2011]元素 贪心+线性基

    线性基其实和向量关系很近.只是他们都是单位向量 然后重复的01组判断方式类似高斯消元判无消方程的情况 由于出现无解方程类似于一个环,所以这个线性无关组就类似一棵树,所以就可以用类似kruskal的方法 ...

  5. BZOJ 2460: [BeiJing2011]元素 线性基

    2460: [BeiJing2011]元素 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法 ...

  6. 线性基(bzoj 2460: [BeiJing2011]元素)

    线性基: 包含最多h个数(a1, a2, a3, -, ah),其中ak如果存在,那么最高位一定是第k位 性质①:线性基中任意集合xor出来的数的值域 = 原数列任意集合xor出的数的值域 性质②:线 ...

  7. 贪心+线性基 [BeiJing2011]元素

    问题 C: [BeiJing2011]元素 时间限制: 2 Sec 内存限制: 128 MB 提交: 25 解决: 16 [提交][状态][讨论版] 题目描述 相传,在远古时期,位于西方大陆的 Mag ...

  8. 2460: [BeiJing2011]元素

    2460: [BeiJing2011]元素 Time Limit: 20 Sec   Memory Limit: 128 MB Submit: 788   Solved: 421 [ Submit][ ...

  9. 【bzoj2460】[BeiJing2011]元素 贪心+高斯消元求线性基

    题目描述 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力越强,但物极必反 ...

最新文章

  1. 大规模 Node.js 网关架构设计与工程实践
  2. Linux VNC server 安装配置
  3. Linux 移除python Error: Trying to remove “yum”, which is protected
  4. java zip压缩_压缩工具
  5. Linux赋予目录或文件任何人都可以读、写、执行的操作
  6. redis中的key设置了过期时间了还会在持久化到文件中吗
  7. shell - 查看天气
  8. 1013-----C语言----------几个va_宏函数的使用
  9. socket 支持 ipv6
  10. 在知网下载硕士的论文PDF格式无需安装CAJ软件
  11. python 分词及语义识别
  12. python table删除一列_在python中从dataframe中删除多个列
  13. H264视频传输、编解码----H264数据结构
  14. OpenJ_Bailian - 2714 求平均年龄
  15. AppNode面板安装搭建教程
  16. 沉痛哀悼我的弟弟-恽小华-南理工教授,候选中科院院士——一声叹息
  17. 大数据与云计算概论2
  18. Ubuntu 壁纸下载
  19. 获取本机ip和端口号
  20. python用户登录a_Python入门案例-用户注册和登录

热门文章

  1. Ubuntu安装OpenSSH让向日葵可以远程控制
  2. 玉米收割机割台的设计 开题报告
  3. 人脸跟踪:KCF核相关滤波算法
  4. python程序怎么保存到u盘_Python 骚操作,自动拷贝U盘
  5. 如何恢复苹果笔记本电脑误删的数据?
  6. pythonturtle写字_对于Python turtle的学习笔记
  7. 计算机二级ms office必背知识点,计算机二级MS Office 函数必背考点资料
  8. 五面拿下阿里飞猪offer,思维图+核心+架构让你一步到位,全网首发!
  9. 斗地主游戏制作流程(1)
  10. Android双卡手机:获取主卡副卡的simid(上)方案实现