贪心
如题
Yuhan の Blog
这个作者很懒,什么都没留下…
展开
-
HDU 2037 今年暑假不AC
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037思路:贪心思想,将节目结束时间从小到大排序,依次选取可以观看的节目;代码:#include<bits/stdc++.h>using namespace std;struct Pro { int s, e; bool operator < ( Pro ...原创 2020-03-01 19:15:58 · 104 阅读 · 0 评论 -
蓝桥杯 PREV-50 对局匹配(贪心)
题目链接:PREV-50 对局匹配思路:1.我们将分数模kkk相同的放在一组,我们知道只有同一组的人才有可能相互匹配到;2.我们遍历每一组,按公差为kkk的分数顺序将该分数的人数组成一个序列,例如所有分数为[2,2,4,5,3,4,5,1,8][2,2,4,5,3,4,5,1,8][2,2,4,5,3,4,5,1,8],kkk为222,则模kkk为000的一组分数为[2,2,4,4,...原创 2020-02-27 15:42:16 · 200 阅读 · 0 评论 -
蓝桥杯 PREV-47 区间移位(二分+贪心)
题目链接:PREV-47 区间移位思路:1.既然是寻得长度的最优解,那我们二分答案便可;2.对于checkcheckcheck函数,我们自然需要检查当前的二分值是否合乎要求,即在lenlenlen长度内能否将这些线段拼凑好;3.博主首先采用左端点越小优先级越高的贪心方法,只有80分,该思路的问题就是过于想当然,如果是求线段移动总长度之和最小,我们可以采用这种方式;4.我们从左往右...原创 2020-02-18 22:37:27 · 338 阅读 · 0 评论 -
蓝桥杯 PREV-6 翻硬币
题目链接:PREV-6 翻硬币思路:题目似乎并没有提到第一种状态不能转化到第二种状态的情况啊…实际上两种状态不相同的位置总数如果是奇数的话就没办法相互转化…题目也没说给定的两种状态一定可以相互转化,那我们就默认可以好了…我们记录所有正反不相同的硬币在字符串中出现的位置,然后贪心地去计数即可;代码:#include<bits/stdc++.h>using name...原创 2020-02-14 18:20:51 · 227 阅读 · 0 评论 -
团体程序设计天梯赛 L3-017 森森快递 (30分)(线段树区间更新)
题目链接:L3-017 森森快递 (30分)思路:题意可以理解为按一定顺序选取这些线段,每选取一个线段,求出该区间最小值,然后区间内都减去这个最小值,依次取下一个线段,我们需要求减去值的总和的最大值;想象一下,每次选取完一段有效线段后,总区间内将会出现1或多个0值,这将导致其它覆盖这些端点的且未选取线段会失效(即选取了区间最小值为0,即不能运输货物);我们采用贪心的思想,使这些0值...原创 2020-02-03 21:35:53 · 627 阅读 · 0 评论 -
Codeforces 1294E Obtain a Permutation
题目链接:Codeforces 1294E Obtain a Permutation思路:对于每一列的数组,我们分开考虑,设当前为第j列(j从1开始);对于在第i位置的数(i从0开始),它应该为i * m + j,因此如果一个数n是在我们目标序列中的,它的位置应该为(n - j) / m;遍历我们当前的序列,计算这个数是否在目标序列中,如果在就计算当前应该挪多少次才能到它应该在的位...原创 2020-01-23 17:15:50 · 306 阅读 · 0 评论 -
Codeforces 1283F DIY Garland
题目链接:Codeforces 1283F DIY Garland思路:用一个数组保存所有结点度数,从后往前扫题目给的数组,[loop][根据贪心思想,每次匹配当前结点和度数为1的结点里序号最小的那个形成一条边,由于是从后往前扫,则我们是从叶子往根部推,因此匹配完这次后可以剪掉这条边不在考虑,算法上的体现就是两者度数都减一]代码:#include<bits/stdc++.h...原创 2019-12-31 17:01:59 · 318 阅读 · 1 评论 -
Codeforces 1283E New Year Parties
题目链接:Codeforces 1283E New Year Parties思路:1.求最小:如果一个房子有人,那么包含它的连续三个房子至少有一个人,那么采用贪心思想,从前往后扫,如果房子有人,那么就判定连着的三个房子有一个人;2.求最大:一段长为n的连续有人区间,如果总人数为n+1,那么这段区间可以向左给出一个人,如果总人数大于n+1,则又可以向右给出一个人;那我们采用贪心思想,从...原创 2019-12-30 23:30:03 · 339 阅读 · 0 评论 -
(Good Bye 2019) Codeforces 1270B Interesting Subarray
题目链接:Codeforces 1270B Interesting Subarray思路:如果所有相邻的数差距都小于2,则输出NO;反之如果大于等于2,相邻的那两个数就符合要求;代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long lon...原创 2019-12-30 17:27:45 · 322 阅读 · 0 评论 -
Codeforces 1279C Stack of Presents
题目链接:Codeforces 1279C Stack of Presents思路:挨个取礼物,维护历史取到的最低层;如果当前礼物的层次高于最底层,那时间只要1(因为之前必定以及排序好),否则就要按层次算时间;代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;...原创 2019-12-28 18:15:38 · 354 阅读 · 0 评论 -
Codeforces 1279B Verse For Santa
题目链接:Codeforces 1279B Verse For Santa思路:贪心思想,先背,背不下去就挑前面最长的一段省代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define fi first#defi...原创 2019-12-28 17:55:46 · 475 阅读 · 0 评论 -
Codeforces 1277C As Simple as One and Two
题目链接:1277C As Simple as One and Two思路:1.如果有twone,我们肯定需要去掉o;2.如果有单独的one或者two,我们去掉中间一个字符即可;(思考一下就可以知道,因为留下的oe和to不会和相邻的字符再组成one或者two)代码:#include<bits/stdc++.h>using namespace std;typede...原创 2019-12-21 18:05:37 · 143 阅读 · 0 评论 -
Codeforces 1277B Make Them Odd(贪心)
题目链接:1277B Make Them Odd思路:1.由于比较大的数字在进行n次操作后可能会和某些小一些的数字相等,相等的话就可以一起除以2,这样次数就会减少;2.那么采用贪心思想,我们每次都选取最大的数字来除2,保存过程中的数,之后如果遇到这些数可以直接跳过,那么这样我们就能得到最小次数;代码:#include<bits/stdc++.h>using nam...原创 2019-12-21 18:00:39 · 266 阅读 · 0 评论 -
Codeforces 1272B Snow Walking Robot
思路:想要回原点,那L和R数量需要相等,U和D数量需要相等;如果竖直方向或水平方向不可以移动,那只能移一次水平或者竖直方向;否则移个正方形即可;代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define fi fir...原创 2019-12-13 16:06:37 · 335 阅读 · 0 评论 -
Codeforces 1272A Three Friends(贪心)
思路:贪心,移最左侧和最右侧的即可代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define fi first#define sc second#define pb(a) push_back(a)#define m...原创 2019-12-13 16:03:17 · 375 阅读 · 0 评论 -
Codeforces 1265D Beautiful Sequence
思路:1.首先判断两个情况(1)b<a;此时需要c=d=0且a=b+1(2)c<d,此时需要a=b=0且d=c+12.判断完之后就舒服了呀,因为肯定有b>=a&&c>=d;我们首先排第一个序列,把0全部排完,我们可以得到0101...01,再排尾部的序列把3全部排完,得到2323...23;3.此时我们只剩1和2了,大家想想,中间的序列一定是2121...原创 2019-12-06 18:35:05 · 347 阅读 · 0 评论 -
Codeforces 1265C Beautiful Regional Contest
思路:1.贪心思想,我们就只让解最多题的那一类拿金牌;2.然后依次往后排银牌,直到银牌数比金牌多;然后再继续排铜牌,因为要保证获奖的尽可能多嘛,那就排到一半人为止就ok了;3.凡是上述步骤中出现异常情况,统统都输出0 0 0即可,比如发现一半人数都用完了,银牌或者铜牌的数量都没办法超过金牌数;代码:#include<bits/stdc++.h>using namespa...原创 2019-12-06 18:24:18 · 189 阅读 · 0 评论 -
Codeforces 1265A Beautiful String
思路:1.如果字符串本身相邻的字符并没有重复,那么肯定可以成为Beautiful String;2.遇到有问号的,直接选择和前一个字符不一样的字符填进去就好了;注意如果后面一个字符如果不是问号,还要避免不要和后一个字符相同;代码:#include<bits/stdc++.h>using namespace std;char nex(char c){ if(c=='a'...原创 2019-12-06 18:15:03 · 304 阅读 · 0 评论 -
Codeforces 1250L Divide The Students(贪心)
思路:1.已知a类学生和c类学生不能在同一组,我们设a>=c,则c类学生必定只能在三组中的一组,此时我们将另外两组空出,分别放置a/2和a-a/2个a类学生;2.此时我们面临的问题就很简单了:如何放置这b个学生,使得这三组高度最底。那当然是看能不能将高度低的两边补满,能补满就均摊着往上堆,不能补满就输出高度最高的那个~代码:#include<bits/stdc++.h>...原创 2019-12-05 19:43:52 · 290 阅读 · 0 评论 -
Codeforces 1263B PIN Codes
思路:水题一道,刚开始把题目看错了卡了好久orz;由于nnn小于等于10,我们只需要对第一个数字进行修改就能保证各不相同了~代码:#include<bits/stdc++.h>using namespace std;map<string,int> mp;void change(string& s){ char c='0'; for(int i=...原创 2019-11-30 03:33:23 · 273 阅读 · 0 评论 -
Codeforces 1260D A Game with Traps(二分查找)
思路:1.首先贪心,我们肯定需要从ddd大的怪物开始消灭;2.设自己在ttt的限制内可以消灭所有ddd大于rsrsrs的怪物,我们二分查找出最小的rsrsrs,然后遍历整个士兵数组查询哪些士兵符合就ok了~代码:#include<bits/stdc++.h>using namespace std;const int MAX_N = 2e5 + 5;int m, n, ...原创 2019-11-28 19:14:28 · 240 阅读 · 0 评论 -
Codeforces 1260C Infinite Fence(扩展欧几里得有解的条件)
思路:1.此题的1010010^{100}10100我们可以将它当成正无穷,我们设x=min(r,b)x=min(r,b)x=min(r,b),y=max(r,b)y=max(r,b)y=max(r,b),由于重复的部分我们可以涂任意颜色,因此我们需要做的就是讨论在yyy的两个倍数之间可不可以夹kkk或kkk个以上的xxx的倍数;2.我们设在mymymy到(m+1)y(m+1)y(m+1)y...原创 2019-11-28 15:06:17 · 282 阅读 · 0 评论 -
Codeforces 1262C Messy
刚读完题一点思路没有,研究了一个多小时都没研究出来,之后听别人说暴力,我吐血orz,又狠狠掉了一波分QAQ;思路:1.第一种想法就是暴力置换了,置换到合适的为止,但是本菜鸡就是不想暴力QAQ;2.第二种想法就是研究它变化的规律,过程并不严谨,甚至有些玄学,大家可以自己推一推,这里直接说结论:1)首先将给的序列变换成合法的序列,同时记录它一个有几个合法前缀序列cnt;2)一个序列有k个合...原创 2019-11-25 14:36:28 · 347 阅读 · 0 评论 -
Codeforces 1255D Feeding Chicken
思路:1.题意是给每只鸡分配一块地方,地方必须连续,所有鸡分配完地方,它们拥有的粮食肯定有差异,我们要做的就是使拥有最多粮食的鸡拥有的粮食和拥有最少粮食的鸡拥有的粮食之差最小;2.利用贪心思想,设粮食总数是ans,则我们可以将这个差值减小到1或0,令a=ans/k,k=a+1,则此时有m只鸡拥有a块粮食,n只鸡拥有b块粮食,此时|a-b|=1,而m和n满足{m+n=kam+bn=ans\...原创 2019-11-23 20:31:27 · 263 阅读 · 0 评论 -
Codeforces 1253C Sweets Eating
思路:1.按照贪心的思想,吃k个糖果一定吃从小到大前k个糖果,且ai大的放在前面吃,因为放在后面吃要翻倍;2.在草稿上稍微画一下图就可以知道,从吃k个糖果到吃k+1个的过程中,我们需要加上a[k+1]+a[k+1-m*1]+a[k+1-m*2]+...+a[(k+1)%m](这里的数组a[]是升序排序后的),我们可以设立一个前缀和数组sum[k+1],它的值就是前面以a[k+1]开始的求和表...原创 2019-11-22 20:56:21 · 166 阅读 · 0 评论 -
Codeforces 1255A Changing Volume
思路:贪心即可代码:#define IOS ios::sync_with_stdio(false)#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define fi first#define sc second#defin...原创 2019-11-22 11:55:08 · 157 阅读 · 0 评论 -
Codeforces 1245D Shichikuji and Power Grid
思路:这题一共有两种思路:1.设立一个虚点,将所有点和它连接,cost是ci,然后其它点两两相连,cost为两点之间建立连接所需价格,然后求这个图的最小生成树,求出来的树中,和虚点相连的点就是自己设发电站的点,两个顶点都不是虚点的边就是需要修路的边;(在求解过程中需要使用long long)2.由贪心思想可以得知,所有ci中最小的那个i点一定要设立发电站,此时我们遍历所有j>=1&a...原创 2019-11-21 15:40:33 · 142 阅读 · 0 评论 -
Codeforces 1255E1 - Send Boxes to Alice (Easy Version)
思路:1.因为所有盒子里要么是0要么是1,因此我们对一个是1的盒子做的操作是移动或者不移动;2.首先计算所有盒子里总的巧克力个数ans,首先明白题目中的k需要是一个质数且k就是盒子里的巧克力个数,这样才能保证移动的次数最少;3.我们可以使用埃氏筛法算出[2,ans]内的所有质数,然后依次遍历,若该数i能被ans整除,则可以分成ans/i个带有i个巧克力的盒子;因为要使移动次数最少,利用贪心...原创 2019-11-21 13:46:51 · 174 阅读 · 0 评论 -
Codeforces 1253B Silly Mistake
思路:按照它的规则检测当前序列是否合法;贪心思想,只要办公室没人了就结束这一天;代码:#define IOS ios::sync_with_stdio(false)#include<bits/stdc++.h>using namespace std;#define pb(a) push_back(a)#define rp(i,n) for(int i=0;i<...原创 2019-11-20 17:57:09 · 334 阅读 · 0 评论 -
Codeforces 1251D Salary Changing
思路:1.用pair数组存储每个员工的最小和最大工资,然后进行降序排序;2.记过程中工资中位数为mid,我们选定一个区间二分查找这个mid;如果所有员工都发放最小工资,那么此刻的mid就应该是所有mid的下界,而总工资S则应该是mid的上界;3.每次选定一个mid后,我们应该判断这个mid合不合适,判断条件是能找到(n+1)/2个人的工资可以达到mid且总工资不会超过S;至于如何选取这个(...原创 2019-11-18 13:20:37 · 199 阅读 · 0 评论 -
PAT 甲级 1111 Online Map (30 分)
思路:1.两次dijskra即可,用dfs会超时,我剪枝剪了好久还是会超时…2.每次判断是否最短(最快)的时候依据题目中的两个标准;3.用vector保存每个点可达的下一个点,用邻接矩阵存储距离和时间,用数组标记每个点是否已知最短(最快),用数组记录每个点此刻离起点的距离、最短路径的最短可达时间、最短时间、最短时间的最少周转次数,再用数组保存每个点的最短路径前驱结点和最短时间前驱结点;4....原创 2019-09-07 11:19:03 · 368 阅读 · 0 评论 -
Codeforces 1257D Yet Another Monster Killing Problem
思路:这题又是参考的cf自带题解:At first, lets precalc array bst; bsti is equal to maximum hero power whose endurance is greater than or equal to i.Now let’s notice that every day it’s profitable for as to kill...原创 2019-11-15 20:52:59 · 276 阅读 · 0 评论 -
Codeforces 1257A Two Rival Students
思路:贪心即可代码:#define IOS ios::sync_with_stdio(false);cin.tie(0)#include<bits/stdc++.h>using namespace std;#define rp(i,n) for(int i=0;i<n;i++)#define rpn(i,n) for(int i=1;i<=n;i++)i...原创 2019-11-15 11:53:45 · 216 阅读 · 0 评论 -
Codeforces 1257C Dominated Subarray
思路:1.寻找两个距离最短的相同的值,距离+1即是答案,数组长为1或者没找到相同值就输出-1;2.既然距离最短了,说明它们两个之间不会有相同值了(最开始两分钟居然没想到这点QAQ)代码:#define IOS ios::sync_with_stdio(false);cin.tie(0)#include<bits/stdc++.h>using namespace std;...原创 2019-11-14 20:11:28 · 153 阅读 · 0 评论 -
Codeforces 1249C2 Good Numbers (hard version)
思路:1.贪心算法~;2.对于任意一个正整数数n,它有两种可能:case1:3a ≤ n ≤ (3a+1-1)/2 和 case2:(3a+1-1)/2 < n < 3a+1(其中a为对应常数);3. (3a+1-1)/2是如何求的呢,是30+31+…+3a,如果处在case2中的数,那大于等于它的good number肯定就是3a+1啦;4. 处在case1中的数,那大于等于...原创 2019-10-23 21:08:08 · 275 阅读 · 1 评论 -
Codeforces 1249D2 Too Many Segments (hard version)
思路:1.用数组存储以每个点为起点的线段,线段由线段的编号(first)和它最右边可以到达的点(second)组成;2.自定义排序规则,右侧较远的线段排在前面,同时右侧一样远的按编号排序(否则set会认为重复,用multiset也不行,erase时会一次移除多个);3.依次从左往右遍历,采用贪心算法,用set动态存储当前时刻覆盖该点的线段,从rbegin开始,如果不能达到该点,依次移除;同时...原创 2019-11-04 13:19:52 · 153 阅读 · 0 评论 -
Codeforces 1256B Minimize the Permutation
思路:贪心算法,每次找能移动的最小的数字往前移代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> p;typedef long long ll;#define isOp(x,y) ((x^y)<0)#define m_p(a,b) make_pair(a,b)#def...原创 2019-11-04 23:57:55 · 285 阅读 · 0 评论 -
Codeforces 1256D Binary String Minimizing
思路:1.每输入进来一个0,看它是否能移动到最前端(前面字符‘1’即为最前端),计算所需要的移动次数,和k做比较;2.k够用就输出一个0;不够的话计算最多能移动到哪,输出相应数量的1,再输出这个0,再输出剩下的1,然后既然k用完了,接下来输入什么就输出什么;3.输入输出的数据量较多,可以考虑优化一下cin和cout,或者直接用scanf和getchar;代码:#include<bi...原创 2019-11-05 15:10:52 · 117 阅读 · 0 评论 -
Codeforces 1256C Platforms Jumping
思路:cf自带的题解,思路很清晰:This problem has a very easy idea but requires terrible implementation. Firstly, let’s place all platforms as rightmost as we can. Thus, we will have the array, in which the first ...原创 2019-11-05 22:55:06 · 354 阅读 · 0 评论