贪心
小菜鸡加油
菜鸡
什么都能折磨
展开
-
C. XOR Inverse(贪心+字典树分治)
https://codeforces.com/problemset/problem/1416/C思路:借用一下图片由于高位确定数大小,因此对于当前层确定了,那么该层的0组和1组之间的逆序对个数就确定了。无法改变组往下的内部的逆序对个数,需要继续搜下去,又回到了上一层的选择状态。对于当前位数字是1,若x该位=0,其逆序数不变。若x该位为1,异或后就是siz[ch[p][0]],即原来的顺序对个数。对于当前位数字是0,若x该位=0,其逆序数不变。若该位为1,异或后就是siz[c.原创 2021-05-27 09:34:11 · 355 阅读 · 0 评论 -
E. Hanoi Factory(dp+单调性优化/dp+线段树)
https://codeforces.com/problemset/problem/777/E思路:推出O(n^2)的转移方程,然后优化。对于优化有两种,一种考虑到决策的单调性,可以利用优先队列或者单调栈 进行优化。另一种是用数据结构的方法来直接找符合要求的转移最值。先第一种。每次都要找最大值,考虑用堆来实现。但是有一个转移条件bi>aj。我们每次取堆头是都要判断一下这个转移是否合法,如果不合法就把堆顶弹掉。这样贪心对吗,会不会把对之后更新有影响的元素弹掉?考虑当前原创 2021-05-26 11:16:29 · 160 阅读 · 0 评论 -
E. Yet Another Division Into Teams(dp+贪心)
https://codeforces.com/problemset/problem/1256/E思路:贪心优化首先sort没问题。然后发现这个转移其实必定变成了连续的子区间。因为假设i位置不连续选了一个前面的j。那么i和j中间的这段,其实全部放到和i,j一起选对答案必定是更优的。因此变成了一个n^2的dp转移。dp[i]=min(dp[j])+add(j+1,i)那么此时还有一个贪心。那就是最多选5个人。假设x1<=x2<=x3<=x4<=x5<=x6,原创 2021-05-25 21:58:15 · 95 阅读 · 0 评论 -
C. Parsa‘s Humongous Tree(树形dp+贪心)
https://codeforces.com/contest/1529/problem/C思路:树形dp;对于当前的根节点取哪个值呢。暴力整个可取范围不行。可以发现,取两端点一定可以产生最值。类似绝对值不等式,放到数轴上去,|x-a|+|x-b|+|x-c|取端点产生极值。那么我们就可以直接每次取两点端点来转移了#include<iostream>#include<vector>#include<queue>#include<cstrin原创 2021-05-25 12:23:30 · 267 阅读 · 0 评论 -
E. Subsequences (easy version)(bfs贪心)
https://codeforces.com/problemset/problem/1183/E思路:easy版本用贪心即可。一层层找。k总共只有100个#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio原创 2021-05-23 13:48:57 · 193 阅读 · 0 评论 -
D. Armchairs(dp+贪心)
https://codeforces.com/contest/1525/problem/D思路:两个人的移动轨迹如果交叉了不会变优。若两个人在位置x,y,x移动到p,y移动到q,不妨设:若q<x<y<p,则y-q+p-x不如x-q+p-y;若x<q≤p<y,则p-x+y-q不如q-x+y-p。若x<y<p<q,则p-y+q-x=p-x+q-y因此对于最后一个人转移,将其定于上一个位置之后的任意一个空位置可以获得不会更差的状态.原创 2021-05-20 00:37:21 · 342 阅读 · 0 评论 -
奇怪的背包问题增加了(贪心)
https://ac.nowcoder.com/acm/problem/204441https://codeforces/contest/1498/problem/B思路:类似这道cfB题#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>原创 2021-05-11 21:41:37 · 88 阅读 · 0 评论 -
机器人(状压dp/贪心)
https://ac.nowcoder.com/acm/contest/9986/G思路:范围很小,爆搜超时,于是状压dp。当然如果范围大了是个贪心的操作#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstd原创 2021-02-28 12:32:18 · 154 阅读 · 0 评论 -
C. Choosing flowers(贪心+二分边界)
https://codeforces.com/problemset/problem/1379/C思路:考虑答案情况,假如a[i]都买了,剩下的钱肯定挑一个b[i]最大的买完。我们注意到,最优的答案应该是剩下的钱都买某个物品了。那么我们可以枚举某个物品,对于其他>这个物品的b[i]的贡献能就都拿,剩下都拿这个物品的b[i].注意一下二分的边界。找大于等于的第一个位置再-1#include<iostream>#include<vector>#include<原创 2021-04-30 17:49:34 · 98 阅读 · 1 评论 -
C.Jeremy Bearimy(树上点对最大值/最小值边权总和)
https://codeforces.com/contest/1280/problem/C思路:参考:https://blog.csdn.net/qq_43682148/article/details/105297317?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242将具体的构造转化成算边的贡献进行思考。再分别贪心考虑最大值,最小值的情况下节点和父亲的边分原创 2021-04-22 18:41:41 · 211 阅读 · 0 评论 -
D. Cut(区间倍增)
https://codeforces.com/contest/1516/problem/D思路:首先要考虑到如何维护互质对。暴力怎么维护。肯定是跑一段到出现了区间内有两个数不互质的地方停止累加区间。预处理:把每个数分解了,对于当前位置能到达的区间更新成当前数分解出的因子处于的前面区间中的最近的地方。这样就把每个区间的段落其实划分好了。可是这么跑还是O(nq)的。这里还要一个倍增处理。当前位置往前跳的步数其实是单调的。从2^i的大到小,有一个满足之后就可以跳过去,最后凑成该区间的长原创 2021-04-22 16:15:59 · 167 阅读 · 0 评论 -
E. Tournament(思维好题+贪心/dp+树形结构)
https://codeforces.com/contest/1260/problem/E题意:n(n<=2^18)个人进行两两比赛,胜者晋级下一轮,败者淘汰第i个人的实力值是i,对任意一轮,你都可以指定还没淘汰的人如何配对比赛,用他们的实力值比大小。如果打不赢可以花钱让自己赢。求你的朋友最后成为冠军所花费的最小代价参考:https://blog.csdn.net/FSAHFGSADHSAKNDAS/article/details/103439470?utm_medium=.原创 2021-04-19 17:51:42 · 165 阅读 · 0 评论 -
C. The Sports Festival(思维+贪心+区间dp)
https://codeforces.com/contest/1509/problem/C思路:不妨先变成有序的递增。然后发现对于 x1<x2<x3<x4假设把x2放在第一个,那么往右边放的一定是连续的x1/x2,而不是先跳到x4,因为(x4-x2)*2>( (x3-x2)+(x4-x2) )于是可以看到,每次应该扔最右边的位置应该是最小值或者最大值。而且不管是最小值还是最大值,新增加的贡献都是在原来的基础上加当前最大值减最小值(当前最后一个位置嘛)假设取原创 2021-04-17 23:14:27 · 342 阅读 · 0 评论 -
B. Array Sharpening(思维+构造)
https://codeforces.com/contest/1291/problem/B思路:单纯思维题,构造到最后一步了却还想着优化..可以发现,不管最后的峰在哪,我们最好就是把开头设置0,然后1 2 3....这样不难想。但是如果去枚举结果的点,再去这么想,就会发现下降的峰受到一些本身不在这个高度的限制。但这其实说明了已经到了贪心的最优了。比如0 1 2 3 4 ...这样去构造,当a[i]>x的时候,说明不能再往后了。也就说明前面最多可以这么多。对于后面也是一样。加起来原创 2021-04-16 19:55:30 · 126 阅读 · 0 评论 -
1095F - Make It Connected(贪心+MST)
https://codeforces.com/problemset/problem/1095/F思路:若没有提供的边时,怎么建图最小:我们把点权值由小到大排序,然后后面的依次连最小的。有边那就连进去建新图,于是最多m+n-1条边。mst直接可做了。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include&原创 2021-04-13 11:54:35 · 96 阅读 · 0 评论 -
F. Education(思维+贪心+枚举)
https://codeforces.com/contest/1512/problem/F思路:第一眼的思路其实是正确的。但是被自己怀疑了正确性。最后还是对的..首先考虑枚举最后在哪个点作为结束,若该点结束,我们需要算出到该点应该剩下多少钱最优+ceil(剩下的差值,a[i]);问题在于到该点前应该剩多少钱,似乎有很多状态,可以在前一个点或者某一个点工作好几天再一口气报班过来再赚钱..这里应该是个贪心,即前一个点一旦能报班就报班(毕竟教育要乘早到i+1这个职位,如果能更新答案的天数,原创 2021-04-11 12:22:43 · 255 阅读 · 0 评论 -
1428D - Bouncing Boomerangs(思维+构造+贪心)
https://codeforces.com/problemset/problem/1428/D思路:从前往后会发现前面的状态会影响后面的情况。从后往前构造。而且此时从后往前构造可以发现:1、弹射两次的飞镖,肯定需要右边弹射一次飞镖的列作为最后一次弹射。2、弹射三次的飞镖既可以利用右边弹射一次的列又可以利用右边弹射两次的列。因此再结合从下往上构造。然后就再分三种情况考虑:对于弹射一次的列,我们每次都放到(i,i),即放在主对角线上,然后将该点的行列坐标存入que1。对于原创 2021-04-10 20:56:52 · 319 阅读 · 1 评论 -
B. GameGame(思维+博弈)
https://codeforces.com/problemset/problem/1383/B思路:开始以为是带博弈类的dp..发现不是...首先贪心,问题转化成了谁先拿到二进制的最高位。于是我们先把按照位数从高到低把每一个位的1的个数处理出来。如果该位是1个,那么先手获胜。如果该位是2个,那么先手取1,不管后面的剩余个数是奇数,还是偶数,总会回到先手取下一个1或者后手取下一个1的状态,所以如果个数%2==0.那么当前高位对于两者得分没有影响。如果该位是3个,那么先手先取..原创 2021-04-09 16:50:37 · 240 阅读 · 0 评论 -
E. Pavel and Triangles(思维+贪心)
https://codeforces.com/problemset/problem/1119/E思路:无法很好证明,只能引别人的说明:原文链接:https://blog.csdn.net/TDD_Master/article/details/89146162三角形的形状只有两种(2 ^ i, 2 ^ i, 2 ^ i)或者(2 ^ i,2 ^ i,2 ^ j)(i>j),不可能有三个边都不同的,因为是2的幂次,这样不可能构成三角形。用之前剩下的来构成三角形即采用(2 ^ i,...原创 2021-04-09 15:48:24 · 116 阅读 · 0 评论 -
1251D - Salary Changing(二分+贪心)
https://codeforces.com/problemset/problem/1251/D思路:二分即可。注意check的时候上界大于x的时候最后分配要取max(x,该人的下界)#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#原创 2021-04-05 15:56:35 · 114 阅读 · 0 评论 -
1264B - Beautiful Sequence(枚举+欧拉通路性质)
https://codeforces.com/problemset/problem/1264/B思路:讨论很麻烦阿..开始是想着01先,23后,多了跑21,然后挂在16想着可以暴力。每次开头的点确定下来了,第二个点要不就是比他小一个,要不就是比他大一个。并且比如1 2 ,后面不会先跑3的,一定是先把1 2 1 2跑完了再跑3或者就是先跑1 0,同样是1 0 1 0跑完了再跑到2.然后讨论这两个进行暴力。原文链接:https://blog.csdn.net/qq_41730082/原创 2021-04-04 10:28:33 · 125 阅读 · 0 评论 -
D. Fill The Bag(思维+二进制贪心+模拟)
https://codeforces.com/problemset/problem/1303/D思路:平时大到小贪心,这次小到大。一个变量记录此时的剩余总量。看能否给与当前位。>=必然是可以给与的。假设当前位为2^pj,剩余总量的p^i(i<=j) ,如果存在==j的,肯定能给。假设全部i<j,剩余总量还能构造出这个2^j吗?肯定可以。第一个都是二进制。第二个 2^pi1+2^pi2+2^pi3+......>=2^pj; 对这个不等式不断/2;最后等式右边必..原创 2021-04-02 20:31:47 · 169 阅读 · 1 评论 -
E. Maximum Subsequence Value(思维+贪心+鸽巢原理)
https://codeforces.com/problemset/problem/1365/E思路:k<=3的时候全选;分析k>3的时候,如果某一位对答案有贡献,那么一定存在该位为1的串>=k-2个,比如k=7,最低位2^0有贡献,那么至少有5个串,而我们随机枚举3个串,必然在这5个串里面。由此贪心#include<iostream>#include<vector>#include<queue>#include<cst原创 2021-03-31 17:14:39 · 188 阅读 · 0 评论 -
D. The Best Vacation(贪心+二分细节)
https://codeforces.com/problemset/problem/1358/D思路:二分可以想到,前缀也可以看出。可是如果对于每个点的全部包含点都去枚举,肯定不行。这里有一个贪心。考虑答案先找到一段最大的di,如果结尾不放在di的最后一天,会存在>=的情况。也就是说最后一天放每个月的最后一天不会更差。所以最后的答案一定是在结尾在每个月的最后一天。这样就变成了On枚举。一个很细节的边界。二分的时候取l=1,这样做算sum[l-1]的时候会导致该点是默认的0,导致会减成负数从原创 2021-03-31 16:18:39 · 183 阅读 · 0 评论 -
540B - School Marks(贪心+构造)
https://codeforces.com/problemset/problem/540/B思路:贪心先满足其中一个条件,中位数的条件。我们发现n是奇数,也就是小于中位数的数最多有n/2个,于是我们把输入的数先sort统计一下小于中位数的个数。剩下的再补。补完之后尽量放最小的不超过总和,也就是放中位数#include<iostream>#include<vector>#include<queue>#include<cstring>#in原创 2021-03-28 09:59:08 · 144 阅读 · 0 评论 -
C. Minimal string(思维+贪心+细节)
https://codeforces.com/problemset/problem/797/C题意:给出一个字符串,按照从前到后的顺序进栈,输出字典序最小的出栈序列思路:最开始贪心,预处理一个后缀,看是否存在比栈顶更小的。有就按下不放出来。然后wa17...以为贪心不行。改成一个处理每个位置的next,然后26枚举到最后能放。最后倒序一遍。依然wa17.然后发现,栈顶之下的元素虽然比栈顶大,但是不一定比后缀大,这边要while不停的判一下栈顶。#include<iostream>原创 2021-03-28 01:06:22 · 249 阅读 · 0 评论 -
D2. Coffee and Coursework (Hard Version)(思维+贪心)
https://codeforces.com/problemset/problem/1118/D2思路:第一眼能看出答案能二分把。然后这题和前缀和不同,虽然每次减的是固定的,但是前缀先加起来会减出负数,而答案+0;二分后考虑贪心check。有x天,每天能加上最大的没有损耗的一个,一共x个。然后喝下一杯就是有一个损耗的。以此类推。sort后每次分组获取贡献。#include<iostream>#include<vector>#include<queue&原创 2021-03-27 14:51:51 · 230 阅读 · 0 评论 -
G. Maximize the Remaining String(思维+暴力枚举/单调栈优化)
https://codeforces.com/contest/1506/problem/G题意:给出一个长度为n的只包含小写字母的字符串要删掉其中的所有重复字符(每个字符必须留一个),使留下来的字符串字典序最大,输出留下的字符串。 n≤2×10^5思路:能暴力就先思考暴力。我们发现答案最多是长度为26的。于是先统计不同种类字母个数,答案长度就是其size。然后对于答案的每一位,我们可以O(26)枚举每一个字符。然后考虑,当前字符如果选了,后面的不同字符的种类个数够不够。够的话就选。.原创 2021-03-27 00:24:16 · 475 阅读 · 0 评论 -
刀工对决(思维+贪心)
https://ac.nowcoder.com/acm/contest/11169/B思路:将其对3和5质因子分解。如果剩下的相等则ok,否则-1.然后对剩下的序列先按照5的个数进行贪心匹配,5转3,然后3消失。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#in原创 2021-03-26 22:15:01 · 96 阅读 · 0 评论 -
CF578B “Or“ Game(思维+贪心+前缀或)
https://codeforces.com/problemset/problem/578/B思路:每次乘2在二进制里意味着该数至少能左移一位,对应高位贪心,我们把k次都集中到一个数上,然后考虑怎么求得其中一个数字改后的整个序列的答案。或满足前缀性质,二进制|不会变少。于是前缀或后缀或就好#include<iostream>#include<vector>#include<queue>#include<cstring>#include&l原创 2021-03-24 21:39:04 · 114 阅读 · 0 评论 -
C. Basic Diplomacy(思维+均分贪心+细节)
https://codeforces.com/contest/1484/problem/C思路:昨晚贪心了5次都是wa。原本思路:处理当前每个数已经拿了几次,还能拿几次。代码细节问题:一层扫完后再更新。中午上课讨论了一下发现有一个hack36312331233123111111原因在于后面只能拿1导致均分不对了。于是我们先处理1天的。更新每个数的已经拿的状态和还能拿的状态,然后回到上面的均分,每一次层拿当前已经拿的人数中最少的。如果一样看...原创 2021-03-22 15:31:27 · 329 阅读 · 0 评论 -
消减整数(思维+贪心)
https://ac.nowcoder.com/acm/contest/11163/C思路很好想..但是bug调了很久。后往前贪心,当前数最多能取多少个,满足前面的每个数都至少取1个。数是log个,最多30,次数最多30,暴力就好。主要是代码的处理,先把要每个取一个的部分都先-1了,防止一些边界问题。然后再贪心取。#include<iostream>#include<vector>#include<queue>#include<cstring原创 2021-03-21 00:03:19 · 110 阅读 · 0 评论 -
D. Minimum Diameter Tree(贪心+均分构造)
https://codeforces.com/problemset/problem/1085/D思路:可以赋值0,而且一条直径的是从这个叶子到其他叶子的上的路径边权总和中的最大值。一旦一条直径多了,就会让其他的直径边权重变少了,不划算。要让所有的最大值都最小,只能是平均分配。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath原创 2021-03-20 12:10:40 · 150 阅读 · 0 评论 -
B. Pipeline(二分+贪心)
https://codeforces.com/problemset/problem/287/B思路:贪心拿最大的。每次取x个管子的式子为1+(2*k-x+1)*x/2-x,二分即可#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#in原创 2021-03-20 11:10:57 · 100 阅读 · 0 评论 -
C. Minimum Grid Path(思维+枚举+贪心)
https://codeforces.com/contest/1499/problem/C思路:横纵分开.而且是对称的.所以说,不管你的序列咋样,奇数肯定是一串,偶数是一串.比如12345,不管你咋转,135是一个集合,24是一个集合。于是On枚举,维护一个最小值和累加的前缀,最小的走尽可能多的路,剩下的前面的就都走一步。On枚举出最小值#include<iostream>#include<vector>#include<queue>...原创 2021-03-19 22:25:26 · 446 阅读 · 0 评论 -
C. Mike and gcd problem(思维+数论+dp/贪心好题)
https://codeforces.com/problemset/problem/798/C题意:给定一个数列,可以进行以下的操作,选相邻两个数进行x-y,x+y的操作。问最少多少次使得整个序列gcd>1;思路:模拟可以发现最多两次就可以出gcd==2的两个数。而且如果原来就gcd!=1,是不会通过1次变成gcd>1的;假设t|x,t|y--->t|ax+by;因此如果1次后gcd可以>1,原来就可以>1。因此不会发生这样事。我们继续...原创 2021-03-18 19:15:49 · 244 阅读 · 1 评论 -
D. Exams(思维+二分+贪心)
https://codeforces.com/contest/732/problem/D思路:开始以为是什么dp问题,发现复杂度是不够的。这个情况下答案应该是有单调性可以二分的。考虑check。设枚举x天完成。我们将要在x天内的(所有要完成考试的时间)更新成最后一次(deadline)碰到空闲天就复习。碰到该考试的deadline你就只能去考了。如果不够时间就调整二分时间。如果够这门考试的时间就可以拿来复习其他科目。最后判一下该轮是不是所有考试都考过了。(wa22)#inclu原创 2021-03-18 11:17:47 · 104 阅读 · 0 评论 -
C. Annoying Present(思维+数学)
https://codeforces.com/problemset/problem/1009/C思路:第一眼以为是二分啥的。但是发现并不对。应该是每个点都有贪心的选法。可以发现,x是每个固定的增量无法改变。变的只能是d,放中位数的时候总的倍数最小,放两端的时候总的倍数最大。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmat原创 2021-03-17 16:57:43 · 139 阅读 · 0 评论 -
D. Two Strings Swaps(思维+讨论)
https://codeforces.com/problemset/problem/1006/D思路:每个点的状态其实就4个点互相换的相关。如果map四个点+=2map三个点讨论一下,一个坑点就是下方b串两个字符相同的时候也改一次就好if(a[i]==b[i]||a[i]==b[j]||a[j]==b[i]||a[j]==b[j]||b[i]==b[j]) ans++; else ans+=2;两个点的就两个情况a a a aa c ...原创 2021-03-17 15:55:25 · 97 阅读 · 0 评论 -
B. Aroma‘s Search(思维+贪心+暴力)
https://codeforces.com/problemset/problem/1292/B思路:考虑最小的2倍也是指数了。因此答案最后100个点。且有一个贪心决策,优先跑左边的。因为跑完左边的一串拿完也没有拿一个完整的区间段的右边来的花费时间多。2^1+2^2<2^3然后有一个问题,比如我起点很靠近右边的区间,这时候我要先拿右边的区间再往左边跑。如何处理。暴力枚举起点拿当前第i个,如果顺路能拿别的也不考虑,一定能遍历到我们要的那个答案状态。然后往左跑,跑完了再往右跑.原创 2021-03-17 14:41:56 · 158 阅读 · 0 评论