贪心
L_0_Forever_LF
一个热爱OI的OIer
展开
-
hdu 5821 2016 Multi-University Training Contest 8 Ball 解题报告
题意:给你n个盒子,每个盒子里可能有球或者没有,告诉你球的颜色,没有就是0,m次操作,每次操作可以把一个区间里的球都拿出来,重新放进去,问你m次操作后能不能到达目标状态 每个盒子最多放一个球题解:这是一道贪心假如对于这样一排盒子1 0 0 1 1 3 2 1目标状态是 3 2 0 0 1 1 1 1我们将初始状态颜色为1的球拿出来,原创 2016-09-22 22:16:39 · 532 阅读 · 0 评论 -
BZOJ1117: [POI2009]救火站Gas
考虑贪心的去放消防站,让每个消防站的层数尽量浅,从而覆盖子树里的点的同时能对子树外产生贡献那么x要放消防站的时候,一定是x的子树里还未被覆盖的最远的点距离x的距离为k,如果这样的点有c个,我们要放⌈cs⌉\lceil \dfrac{c}{s} \rceil个消防站,这些消防站覆盖完了这c个点后,再去覆盖距离x距离为k-1的点,都覆盖完了后还能覆盖的点数上传给父亲 为什么这样是最优的,因为此时距离x原创 2017-12-11 15:44:47 · 465 阅读 · 1 评论 -
BZOJ1025: [SCOI2009]游戏
求和不超过n的若干个数,lcm有多少种将lcm分解质因数 lcm=p1^k1*p2^k2…..pm^km 不同质因子显然互不影响 要使lcm含pi^ki这个因子,至少要有一个数含pi^ki这个因子 因为这些数都>1,所以a*b>=a+b 所以贪心的想肯定单独一个pi^ki比较优 f[i][j]表示前i个质数,和为j,lcm有多少种 转移的时候枚举pi^ki 能保证不重不漏code:#原创 2017-12-04 19:48:58 · 252 阅读 · 0 评论 -
BZOJ3829: [Poi2014]FarmCraft
贪贪贪的题我都不是很会会啊qwqf[i]代表从i开始走i的子树,最晚装完机的妹子什么时候装完,g[i]代表走完i的子树需要多少时间 对于转移,因为每条边只能走2次,走了一棵子树就一定要走完,对于一棵子树j,f[j]-g[j]是走完这棵子树,装机多出来的空闲时间,肯定要尽量利用这些空闲时间,所以按照f[j]-g[j]从大到小走子树转移code:#include<set>#include<map>原创 2017-11-25 07:47:59 · 359 阅读 · 0 评论 -
BZOJ2811: [Apio2012]Guard
先将序列中不可能有忍者的位置标出来 如果剩下的位置恰好有K个,要特判直接全部输出然后将每个区间缩掉两端的0 如果存在某两个区间A,B,A包含B,那么A是不必要的 处理完后剩下的区间两两互不包含,按右端点排序后,从左到右左右端点递增 易知只有每个区间的右端点有可能一定有忍者,因为贪心的放肯定是放右端点更优用f[i]表示保证了1~i区间的限制最少需要几个忍者,g[i]表示保证了i~n的区间限制至原创 2017-12-05 11:14:04 · 285 阅读 · 0 评论 -
BZOJ3716: [PA2014]Muzeum
首先把给出的视线范围转成向量,建立以这两个向量为基底的平面直角坐标系,每个点得到新的坐标后取反横坐标,变成每个守卫可以看见横坐标比自己小,纵坐标比自己大的手办这个东西似乎对应一个最小割模型,加上所有手办的价值,源连守卫权为贿赂守卫的花费,守卫连他能看见的手办权为inf,手办连汇权为手办的代价,减去最小割因为图太大了,不能跑最小割 考虑到最小割=最大流,可以模型转化,每个守卫有花费这么多的流量,分配原创 2017-12-15 09:41:11 · 445 阅读 · 0 评论 -
BZOJ3718: [PA2014]Parking
因为停车场无限长,贪心的想,肯定是先把堆在一起的车拆开,全部分散开,然后移到对应的位置再组合起来….(匮乏的语文表达能力,泥萌意会一下?所以求出初始状态和目标状态的排列顺序线段树找一下区间最大值判一下是否超过宽度就行了code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cm原创 2017-12-15 09:51:13 · 341 阅读 · 0 评论 -
BZOJ4071: [Apio2015]巴邻旁之桥
在河同一边的可以不理他问题就是有若干个人在A侧l位置,要通过桥到B侧r位置 l< r 当K=1时发现答案就是所有l,r的中位数 因为ans=|p−l|+|p−r|ans=|p-l|+|p-r|(好有道理我怎么没发现qwq) 同时这启示我们(观察易得??qwq)当有两个桥时,每个人会选择更接近(l,r)中点的桥 所以我们将(l,r)按照中点排序后,两个桥将这些人分成了两部分,我们枚举这个分界原创 2017-12-06 20:55:34 · 430 阅读 · 0 评论 -
BZOJ2525: [Poi2011]Dynamite
我想O(n)但是好像不太行? 于是二分一下答案 贪心的取标记点,每个标记点让他的层数尽量浅以对其他子树产生贡献 f[i]表示i的子树一定要多少个标记点,g[i]表示i的子树内最浅的标记点的层数,d[i]表示i的子树内未被覆盖的最深的点的层数 贪贪贪,dp一下 有一些细节qwqcode:#include<set>#include<map>#include<deque>#include<原创 2017-12-06 21:22:08 · 278 阅读 · 0 评论 -
BZOJ1122: [POI2008]账本BBB
每次取反序列的和改变2,旋转和不变 根据原始序列的和,q-p可以算出至少要取反的次数,如果额外的次数记作花费,产生花费只可能是因为某个前缀和<0 预处理1~i,i~n前缀和的最小值,因为至多旋转n-1次,枚举旋转次数,算粗前缀和最小的位置,保证这个位置>=0就可以保证序列合法,算一下花费什么的code:#include<set>#include<map>#include<deque>#in原创 2017-12-08 09:36:14 · 459 阅读 · 0 评论 -
BZOJ1124: [POI2008]枪战Maf
发现这是若干个基环内向树和若干个环 最坏情况下: 一个单独的环死剩1个 一个基环内向树死剩入度为0的点 最优情况下,显然按照拓扑序开枪死的人最少,模拟一下就行了注意特判一个单独的自环qwqcode:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#inclu原创 2017-12-08 09:39:51 · 348 阅读 · 0 评论 -
BZOJ3721: PA2014 Final Bazarek
要求和为奇数,就是选奇数个奇数,任意个偶数 将n个数按奇偶分类,f[i],g[i]表示取i个数和最大,取了f[i]个奇数,g[i]个偶数,显然都是各自最大的f[i],g[i]个 转移的时候枚举取出的是奇数还是偶数,从i-2,i-1转移到icode:#include<set>#include<map>#include<deque>#include<queue>#include<stack>原创 2017-12-17 20:55:51 · 369 阅读 · 0 评论 -
BZOJ3725: PA2014 Final Matryca
一开始看错题了qaq因为对每个位置都要刷一遍,对于不同颜色的位置i,j(i< j),长度要保证刷到i的格子不会刷到j,即j-i>n-L,显然只要用相邻的不同颜色限制长度,得出若干个关于L的不等式,可以解得L的最小值code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmat原创 2017-12-19 09:43:50 · 278 阅读 · 0 评论 -
BZOJ3850: ZCC Loves Codefires
考虑最优的顺序满足什么性质 设两个部件A,B顺序为A在B前面,费用分别是a,b,耗时ta,tb,中间部分费用和S,耗时和T 如果最优顺序中A在B前面(A,B前后的部件显然不需要考虑),则有 ata+Sta+b(ta+T+tb)<btb+Stb+a(tb+T+ta)at_a+St_a+b(t_a+T+t_b)<bt_b+St_b+a(t_b+T+t_a) 得Sta+bta+bT<Stb+a原创 2018-01-03 14:15:47 · 323 阅读 · 0 评论 -
BZOJ3863: The Revenge of the Princess’ Knight
一个环,把他分割成恰好k段,使字典序最大的段最小 可以旋转 这题和code festival 2017 qual B 的F挺像的 不过那题是给你字符,让你随便拼,这题倒着理解是把环上相邻的字符拼在一起直到剩下k段 但是贪心的思想是类似的把一开始的所有字符视作一个串Si,把这n个串和他们在环上前一个串Ti塞进一个multiset,每次取出最大的串Sx(如果有多个最大的串就取出Tx最小的)原创 2018-01-13 10:18:05 · 404 阅读 · 0 评论 -
BZOJ3728: PA2014Final Zarowki
贪贪贪将一开始的灯泡和房间从小到大排个序 房间倒着处理,每个房间找>=他的功率的还未匹配的最小的灯泡,将他们匹配上 找不到匹配的灯泡一定要花费一次替换,打个标记在上面,先不管他 匹配完房间如果已经不够替换就gg 否则将每个房间匹配的灯泡-他的要求塞进一个大根堆 去掉堆顶的剩余替换次数个code:#include<set>#include<map>#include<deque>#inc原创 2017-11-17 19:54:23 · 384 阅读 · 0 评论 -
BZOJ4378: [POI2015]Logistyka
题意看错以为有坐标的限制….赋值0的情况没处理好对于一个询问,每次选c个,拿s次 如果序列中某个元素>=s,每次一定要拿它,设这样的有k个,对于剩下的< s的元素,易证当序列中剩余的数之和>=(c-k)*s时有解,就是个二维偏序问题,离散化+树状数组code:#include<set>#include<map>#include<deque>#include<queue>#include<s原创 2017-09-29 11:23:35 · 311 阅读 · 0 评论 -
BZOJ4724: [POI2017]Podzielno
定理:若一个数被B-1整除,则它在B进制下各个位置的和一定能被B-1整除 这里证的挺清楚的 因为要求最大,肯定位数越多越大,注意到每个数的数量>=1,所以若这些数的和不是B-1的倍数,就去掉1个余数,然后弄个前缀和,每个询问二分一下就行了code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>原创 2017-09-26 16:38:06 · 375 阅读 · 0 评论 -
BZOJ4245: [ONTAK2015]OR-XOR 解题报告
Description给定一个长度为n的序列a[1],a[2],…,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or … or c[m]。请求出总费用的最小值。 Input第一行包含两个正整数n,m(1<=m<=n<=500000),分别表示序列的长度和需要划分的段数。 第一行包含n个整数,其中第i个数为ai。 Ou原创 2016-10-10 20:35:19 · 761 阅读 · 0 评论 -
BZOJ3507: [Cqoi2014]通配符匹配 解题报告
日常吐槽部分可以跳过这题又坑了蒟蒻一下午,表示很不爽(自己弱能怪谁) 看完题想了一会一直觉得是很高级的做法,自己肯定不会了,搜了题解并不能看懂在讲什么,去问大神,Claris表示这不是 贪心+hash 就能搞定的题吗(为什么我连贪心都没想到啊还有怎么hash匹配并不会) 敲完怎么拍都拍不出错,一个小时后拍出来结果发现一个判 ? 的地方下标没更新,改了就A了。 但是为什么我注释掉这个判 ? 的语原创 2016-10-01 18:09:47 · 1643 阅读 · 0 评论 -
hdu5831 Rikka with Parenthesis II 2016 Multi-University Training Contest 8 解题报告
日常吐槽可跳过送分的一道贪心我错这么多遍还看题解我是不是可以退役了…………….题意给你一个括号序列,必须交换两个不同的括号,问有没有一种交换方法使得交换后的序列是一个合法的括号序列题解贪心 将(看作+1,)看作-1,那么一个合法的序列,任意一个位置的前缀和都要是一个非负数,整个序列的和必须是0,那么考虑一次有意义的交换,只会是前面的-1和后面+1交换,那么在这两个数之间的前缀和+2,其他不受影响,原创 2016-10-03 19:09:08 · 728 阅读 · 0 评论 -
BZOJ4240: 有趣的家庭菜园
问移成一个前一段单调不降,后一段单调不升的序列最少要交换多少次 将原序列标一下下标,那么最终序列需要的交换次数就是其标号序列的逆序对数,比如从 2 8 4 5 3 6 -> 2 4 5 8 6 3 ,最终序列的下标分别是: 1 3 4 2 6 5,逆序对个数为3,所以至少交换3次 然后因为最高的一定放在中间,次高的在其两侧中的一侧,我们可以贪心的去构造这个最终序列。先把最高的放中间,然后放次高的原创 2016-11-16 07:27:57 · 1046 阅读 · 0 评论 -
BZOJ1489: [HNOI2009]双递增序
题意去哪了我去根据某题解的题意描述,题目应该是给一个序列,让你把他分成两个长度为n/2的序列,使得两个序列里的数权值和下标都是递增的,奇数的情况我不知道,但看起来数据n应该都是偶数的做法有很多种,可以直接DP,la1la1la教了我一种图论做法(Orz la1la1la),然后窝想了想,打了一个 贪心+DP先讲一下图论的做法,有道题和这个有点像,问的是至少要分成几个序列,那 可以发现这是一个最小链原创 2016-12-06 14:09:31 · 874 阅读 · 0 评论 -
BZOJ3105: [cqoi2013]新Nim游戏
线性基题意说前两回合双方都只能拿若干堆或不拿但不能拿完,所以要必胜就需要使第一轮拿完后剩下的堆的集合里没有一个子集的异或和为0 然后就可以线性基+贪心,使剩下集合和最大就是第一次拿的最少的解code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include原创 2017-01-13 16:25:38 · 450 阅读 · 0 评论 -
BZOJ2460: [BeiJing2011]元素
线性基例题 不会线性基的去学一下,这里不再介绍题目要求一个值最大的集合是任意一个子集的异或和都不为0 先按值排序,然后按顺序放进集合,一个数如果和之前的一些数异或和为0就跳过他,因为如果要把这个数放进去,那就要把之前的某个数拿出来,而这样交换之后集合能异或出的数是不会变的,和却变小了code:#include<set>#include<map>#include<deque>#include原创 2017-01-13 09:58:23 · 523 阅读 · 0 评论 -
BZOJ 3174: [Tjoi2013]拯救小矮人
不会做,看了各种题解都不理解后来看这篇看懂了,这篇我觉得是我看的写的最好的了,关键就是最后小矮人跑出去的序列一定是一个身高+臂长递增的序列(意会一下?),所以按这个排序是为了DP,然后设f[i]为出去i个人后剩下人的最大高度#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmat原创 2017-02-18 09:39:33 · 764 阅读 · 0 评论 -
BZOJ2789: [Poi2012]Letters
一个很眼熟的贪心 首先一个序列对他编好号后,末状态编号的逆序对数就是交换相邻2个达到这个状态需要的最少次数 将A序列1~n编号,再对B序列按顺序每个字母赋这个字母有的所有编号里最小的这样能使得逆序对数最少,然后求B的逆序对数code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#inclu原创 2017-02-18 10:40:05 · 656 阅读 · 0 评论 -
BZOJ2792: [Poi2012]Well
先二分z 然后将序列调整成相邻数字的差都不超过z 计算对于每个位置i将它调成0,维护序列需要的操作次数,比如计算左侧的贡献,用j表示最左一个点不满足abs(a[i]-a[j])<=(i-j)*z,随i的增加j单调递增,且因为之前已经将序列调整过使得相邻数字差不超过z,所以可以O(1)算出j~i调整的操作次数,对于右侧点类似code:#include<set>#include<map>#inc原创 2017-02-18 11:09:44 · 547 阅读 · 0 评论 -
BZOJ2802: [Poi2012]Warehouse Store
很经典的贪心,有两种做法 1:我的做法,按需求从小到大排序,写一棵线段树,对于每个判这一天是否能取,易证这样取一定是最优的 2:经典做法?直接按天数处理,维护一个大根堆,如果当前这一天不能满足顾客要求,若大根堆堆顶比当前要求大,就把堆顶pop出,把这一天的放进去code:#include<set>#include<map>#include<deque>#include<queue>#in原创 2017-03-06 21:36:05 · 344 阅读 · 0 评论 -
BZOJ1029: [JSOI2007]建筑抢修
和poi某题题意化简后一样经典贪心:维护一个大根堆,按T2从小到大,对于每个建筑,若能修好就将它塞进堆里,若不行,和堆顶比一下大小,比堆顶小就把堆顶pop出去把它塞进去code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#inc原创 2017-03-06 21:44:42 · 543 阅读 · 0 评论 -
BZOJ3293: [Cqoi2011]分金币
经典贪心设第x人给他右边的人xi个金币,因为最后每个人的金币数ave易知,所以可以得到n个方程: a1+xn-x1=ave a2+x1-x2=ave ….. 设bi=ai-ave 得 x1=xn+b1 x2=x1+b2=xn+b1+b2 …. 设ci=∑ii=1bici=\sum_{i=1}^ibi 所以答案就是 ans=∑|xi|=∑|xn+ci|ans=\sum|xi|=\原创 2017-03-07 12:58:59 · 404 阅读 · 0 评论 -
BZOJ1106: [POI2007]立方体大作战tet
转化了个带颜色的括号序列模型….然后不会….题解是贪心…emmmmmmmmmm 好有道理a(不想证了…很对就是了….加入每个颜色时,如果它已经出现过,就让他和上次出现的合并 用树状数组维护距离code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#inclu原创 2017-09-25 16:14:06 · 285 阅读 · 0 评论 -
BZOJ2115: [Wc2011] Xor
因为一个大环可以由很多个小环拼在一起xor得到,所以我们可以只关注小环 最后的答案一定是一条1到n的路径,路径上挂了很多个环,这个路径我们其实可以任取一条1到n的路径,因为若1到n有多条路径,那这些路径间也组成了环,我们选定随意一条路径都可以通过xor环得到任意一条路径 对于一个环,如果他不在路径上,事实上我们走到它,走完这个环,走回路径上,来回路径的异或值为0,也能单独取到这个环,因为是无向...原创 2017-01-13 15:29:04 · 1531 阅读 · 0 评论