B2460 [BeiJing2011]元素 线性基
这个题是对刚才线性基的一个补充,就是中间有一些小贪心,贪心就很有意思,先按权值排序,然后就瞎搞就行了.
题干:
- Description
- 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔
- 法矿石炼制法杖的技术。那时人们就认识到,一个法杖的法力取决于使用的矿石。
- 一般地,矿石越多则法力越强,但物极必反:有时,人们为了获取更强的法力而
- 使用了很多矿石,却在炼制过程中发现魔法矿石全部消失了,从而无法炼制
- 出法杖,这个现象被称为“魔法抵消” 。特别地,如果在炼制过程中使用超过
- 一块同一种矿石,那么一定会发生“魔法抵消”。
- 后来,随着人们认知水平的提高,这个现象得到了很好的解释。经过了大量
- 的实验后,著名法师 Dmitri 发现:如果给现在发现的每一种矿石进行合理的编
- 号(编号为正整数,称为该矿石的元素序号),那么,一个矿石组合会产生“魔
- 法抵消”当且仅当存在一个非空子集,那些矿石的元素序号按位异或起来
- 为零。 (如果你不清楚什么是异或,请参见下一页的名词解释。 )例如,使用两
- 个同样的矿石必将发生“魔法抵消”,因为这两种矿石的元素序号相同,异或起
- 来为零。
- 并且人们有了测定魔力的有效途径,已经知道了:合成出来的法杖的魔力
- 等于每一种矿石的法力之和。人们已经测定了现今发现的所有矿石的法力值,
- 并且通过实验推算出每一种矿石的元素序号。
- 现在,给定你以上的矿石信息,请你来计算一下当时可以炼制出的法杖最多
- 有多大的魔力。
- Input
- 第一行包含一个正整数N,表示矿石的种类数。
- 接下来 N行,每行两个正整数Numberi 和 Magici,表示这种矿石的元素序号
- 和魔力值。
- Output
- 仅包一行,一个整数:最大的魔力值
- Sample Input
- Sample Output
- HINT
- 由于有“魔法抵消”这一事实,每一种矿石最多使用一块。
- 如果使用全部三种矿石,由于三者的元素序号异或起来: xor xor = ,
- 则会发生魔法抵消,得不到法杖。
- 可以发现,最佳方案是选择后两种矿石,法力为 +=。
- 对于全部的数据:N ≤ ,Numberi ≤ ^
- ,Magici ≤ ^
代码:
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<ctime>
- #include<queue>
- #include<algorithm>
- #include<cstring>
- using namespace std;
- #define duke(i,a,n) for(int i = a;i <= n;i++)
- #define lv(i,a,n) for(int i = a;i >= n;i--)
- #define clean(a) memset(a,0,sizeof(a))
- const int INF = << ;
- typedef long long ll;
- typedef double db;
- template <class T>
- void read(T &x)
- {
- char c;
- bool op = ;
- while(c = getchar(), c < '' || c > '')
- if(c == '-') op = ;
- x = c - '';
- while(c = getchar(), c >= '' && c <= '')
- x = x * + c - '';
- if(op) x = -x;
- }
- template <class T>
- void write(T x)
- {
- if(x < ) putchar('-'), x = -x;
- if(x >= ) write(x / );
- putchar('' + x % );
- }
- struct node
- {
- ll x,y;
- }a[];
- ll ans = ,n;
- ll p[];
- bool cmp(node a,node b)
- {
- return a.y > b.y;
- }
- void get_num(int f,ll x)
- {
- lv(i,,)
- {
- if(!(x & (1LL << i)))
- continue;
- if(!p[i])
- {
- p[i] = x;
- break;
- }
- x ^= p[i];
- }
- if(x != )
- ans += a[f].y;
- }
- int main()
- {
- read(n);
- duke(i,,n)
- {
- read(a[i].x);
- read(a[i].y);
- }
- sort(a + ,a + n + ,cmp);
- duke(i,,n)
- {
- get_num(i,a[i].x);
- }
- printf("%lld\n",ans);
- return ;
- }
- /*
- 3
- 1 10
- 2 20
- 3 30
- */
B2460 [BeiJing2011]元素 线性基的更多相关文章
- BZOJ 2460: [BeiJing2011]元素 线性基
2460: [BeiJing2011]元素 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力 ...
- BZOJ.2460.[BeiJing2011]元素(线性基 贪心)
题目链接 线性基:https://blog.csdn.net/qq_36056315/article/details/79819714. \(Description\) 求一组矿石,满足其下标异或和不 ...
- BZOJ 2460 [BeiJing2011]元素 ——线性基
[题目分析] 线性基,由于最多有63个,只需要排序之后,动态的去维护线性基即可. [代码] #include <cstdio> #include <cstring> #incl ...
- BZOJ-6-2460: [BeiJing2011]元素-线性基
链接 :https://www.lydsy.com/JudgeOnline/problem.php?id=2460 思路 :线性基不唯一,所以排序 进行贪心选择,价值最大的线性基, #include& ...
- bzoj 2460 [BeiJing2011]元素 (线性基)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2460 题意: 给你一堆矿石,矿石有a,b两种性质,取任意个矿石,满足取得的这些矿石a性质异或 ...
- [bzoj2460] [BeiJing2011]元素(线性基+贪心)
题目大意: 有一些矿石,每个矿石有一个a和一个b值,要求选出一些矿石,b的和最大且不存在某个矿石子集它们的a的异或和为0. 解题关键:对魔力进行由大到小排序,依次加入线性基,统计即可. #includ ...
- [BZOJ2460][BJOI2011]元素(线性基)
2460: [BeiJing2011]元素 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2195 Solved: 1119[Submit][Sta ...
- BZOJ 2460 [BeiJing2011]元素(线性基模板题)
Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石.一般地,矿石越多则法力越强 ...
- 【BZOJ2460】【BJOI2011】元素 [线性基]
元素 Time Limit: 20 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 相传,在远古时期,位于西方大陆的 Ma ...
随机推荐
- 清瘦的记录者: 一个比dbutils更小巧、好用的的持久化工具
https://gitee.com/bitprince/memory 1. 概述 1.1 连接.语句和结果集 从JDBC的规范上看,其对数据访问层有相当简洁的抽象:1.连接(connection) 2 ...
- The type new View.OnClickListener(){} must implement the inherited abstract method View.Onclicklis
public class MainActivity extends Activity { protected Button startBrew = null; @Override protected ...
- javascript的严格模式:use strict
ECMAscript 5添加的运行模式,禁止一些非标准.不安全的操作. <script> "use strict"; console.log("这是严格模式. ...
- 大白_uva10795_新汉诺塔
题意:给出所有盘子的初态和终态,问最少多少步能从初态走到终态,其余规则和老汉诺塔一样. 思路: 若要把当前最大的盘子m从1移动到3,那么首先必须把剩下的所有盘子1~m-1放到2上,然后把m放到3上. ...
- HDU_1087_Super Jumping! Jumping! Jumping!_dp
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- C/C++ 之数组排序
#include <stdio.h> #include <stdlib.h> void array_sort(int *a, int len) { int i, j, tmp; ...
- iPhone设备当前IP和SSID的获取
#import <Foundation/Foundation.h> typedef void(^Complation)(NSString *res); @interface WIFIMan ...
- uva 1585 Score(Uva-1585)
vj:https://vjudge.net/problem/UVA-1585 不多说水题一个o一直加x就加的变为0 我的代码 #include <iostream> #include &l ...
- 66.零停机下reindex
主要知识点: 理解reindex的使用场景和必要性 学会reindex 一.理解reindex的使用场景和必要性 假设:在某一个index中依靠dynamic mapping插入数据, ...
- Mac在python3环境下安装virtualwrapper遇到的问题
前言 我在使用mac安装virtualwrapper的时候遇到了问题,搞了好长时间,才弄好,在这里总结一下分享出来,供遇到相同的问题的朋友使用,少走些弯路. 问题说明: Mac默认系统的python2 ...