贪心
pbihao
这个作者很懒,什么都没留下…
展开
-
【BZOJ 4245】[ONTAK2015]OR-XOR 二进制贪心
首先明确最后的结果运算下来只有一个数字,把他想象成二进制数的话,要使答案最小,就应该满足高位1竟可能的少用0来代替。维护一个异或前缀和,从高位开始枚举,当枚举的这一位为0的前缀和个数大于等于m且第n位也是0的时候当前位可以为0.然后标记所有的当前位为1的异或前缀在之后都不能划分 #include #include #include using namespace std; #define L原创 2016-12-16 20:51:53 · 326 阅读 · 0 评论 -
【BZOJ 2563】 阿狸和桃子的游戏 脑洞+贪心
一个不错的题目。因为是求两人得分的差值,所以我们将边权对半分,分别加在所连接的两点上,这样如果两边是不同的人拿的话,相减就等于没有拿,而如果是相同的人拿,就相当于拿全了,但是为了避免浮点数,所以采用点权乘二,最后答案/2 #include #include #include #include #define maxn 100020 #define LL long long using names原创 2017-01-06 18:38:55 · 275 阅读 · 0 评论 -
【BZOJ 1150】[CTSC2007]数据备份Backup treap+贪心
贪心的话就懒得说了,反正一堆题解,只是看大家都用的优先队列然后突然想起自己好像很久没有写treap了就写了个treap,查询的话树上二分就好啦。。。。。然后一个插入一个删除 #include #include #include #define LL long long #define maxn 100020 #include #define inf 0x3f3f3f3f using names原创 2017-01-06 20:37:33 · 225 阅读 · 0 评论 -
【BZOJ 1954】Pku3764 The xor-longest Path trie+贪心
按位贪心。 先把1作为根节点然后依次遍历每个节点,把每个节点到1的异或和插入一个trie树,每次就用当前节点到根节点的异或和来跟新答案,然后插入到trie树中。查询按位贪心就好了。 #include #include #include #define clear(u) ch[u][0]=ch[u][1]=0; #define maxn 100020 using namespace std; i原创 2017-01-10 21:48:34 · 223 阅读 · 0 评论 -
【BZOJ 3689】异或之 trie+堆
以前做过类似的题目,不同的是把异或改成加法。。。。。。 还以为异或和加法没有太大的区别,把初始的几个数字放进优先队列里面,一个一个的取出来,得到次大值,再放进去,一直重复知道k个,至于找一个数和其他树异或的k大值可以用trie树轻松解决。 原因嘛,很显然对于每一个数经过我们构造出来的数字是单调递增的,然后放进堆里面每次保证取出堆里面的数字也是单调递增的(有点类似于dijkstra的样子,当时是原创 2017-01-15 20:42:15 · 432 阅读 · 0 评论 -
【BZOJ 2809】[Apio2012]dispatching 可并堆
只有我一个人纠结了半天没读懂题吗?心塞。就是给你一个关系子图,选一个点作为管理者,他可以派遣自己为根的这棵子树的所有的忍者,但是总费用不超过m,满意度等于派遣出去的忍者数目*管理力(自己也可以被自己派遣)。 首先考虑,如果选当前节点为管理者派遣的忍者费用已经超过了m,那么对于他的父亲节点,费用肯定也是不够的。所以每一次都要维护不超过m的忍者,基于贪心的思想,忍者的费用对答案无贡献只有数目有,所以原创 2017-01-12 08:36:33 · 234 阅读 · 0 评论 -
【BZOJ 1528】[POI2005]sam-Toy Cars 贪心+堆
很显然如果不够k的话就不用放回去,如果够了就需要放回去一个,这时候只要放回去的是之后用到的最远的一个就可以了,用一个nxt数组然后堆维护,最后就是弹出堆的时候需要判断一下这一个是否已经放回去了。 #include #include #include #include #define MK make_pair #define maxn 500055 using namespace std; int原创 2017-01-19 11:46:08 · 370 阅读 · 0 评论 -
【 BZOJ 3721】 PA2014 Final Bazarek 贪心
其实一开始的想法就是排序以后然后奇数偶数,奇数就直接输出,偶数就掉前面的最小奇数加上后面的最大的偶数或者反过来取更优。 但是一直不知道怎么证明,看网上也大都没有证明(贪心不证明的话很容易gg啊。。。逃) 后来一想其实还是好想。首先排序然后要满足前缀和为奇数,说明奇数一定出现奇数次,偶数随便出现多少次,那么当前缀和为偶数的时候也就意味着奇数出现了偶数次,此时我们考虑调整数列。 1.减少或者增加原创 2017-01-19 22:12:08 · 231 阅读 · 0 评论