
贪心算法
Forward in time
永不停止前进
展开
-
L. Lifeguards(排序)
题意:知道游泳者的坐标,有两个教练看管,并且两位教练看管的游泳者最多只有一个,一个游泳这只能被一个教练看管(只有其中的一个游泳者能被两个教练同时监管)。求两位教练的坐标;这道题,我读了读,没什么思路,就没有写了,结果看了题解。。。。。我怎么没想到无穷远呢???如果n为奇数,那么只需要找到排序后的中间坐标然后y±1就行了,这样他们最多只能同时管同一个游泳者。如果n是偶数,那么必须平分为两个简...原创 2020-03-14 23:37:32 · 288 阅读 · 0 评论 -
Southern and Volga Russia Qualifier 2019-2020(A Yellow Cards(贪心))
题意:两个队,然后给出需要罚下1队的一个人员和2队的一个人员各自的最少黄牌数目(就是第一队如果有一个人拿了k1张黄牌,那么就出局,第二个队如果有一个任拿了k2张黄牌,那么就出局);现在给你了 黄牌在场上出现的次数(注意:题目上说了一张黄牌只能用一次);问最少罚下的人数和最多罚下的人数;这个就很明显了呗;如果n>=a1k1+a1k2,这里a1k1+a2k2表示如果全部罚下,那么需要的...原创 2019-10-13 16:14:13 · 235 阅读 · 0 评论 -
D - Vacation HDU - 6581(思维题+基础物理)
这道题最关键的地方在这:意思就是这些车的距离是0;并且无论你开多快,你只能和前面的并起走;然后求车头过终点线的最短时间;题目的案例给的是每个车的长度l和每个车头部距离终点长度s和他能行驶的最大速度v;那么最好想的一种就是这个距离终点最远的车单独自己到达终点时那么时间就是t=s0/v0;但是如果这辆车和他前面的车相连接后,那么他的速度一定会减小(因为能和前面车想链接说明肯定原速度更...原创 2019-08-27 20:50:30 · 197 阅读 · 0 评论 -
A. There Are Two Types Of Burgers(思维题)
题意:一个汉堡包需要由2个小面包+1个小的牛排组成,一个鸡肉汉堡需要由2个小面包+1个小鸡肉排组成;现在给你了小面包数b,小牛排数p,小鸡肉排数f,已知一个汉堡包和一个鸡肉汉堡包的单价分别为h,c;问:怎么组合小面包和小牛排和小鸡肉排才能使得卖的价值最大;其实这个就很明显了,肯定拿尽可能多的材料组成单价最高的涩;所以开头比较单价,然后去用材料组成对应的汉堡,然后再把剩下的材料拿去组成另一...原创 2019-08-29 19:02:34 · 487 阅读 · 0 评论 -
H. Fight Against Monsters(贪心)
这个题题目的意思很好懂;就是有n个怪兽,他们各自的Hp和Atk都给了;然后一个英雄去kills这些Monsters;但是有个规则:就是该英雄对一个怪物,他对怪物的伤害是随着攻击次数增加的;也就是等差数列(第一次为1点伤害,第二次为2点伤害,第三次为3点伤害…);但是在英雄攻击怪物之前他会被所有的怪物攻击;并且受到的损伤是所有怪物的攻击力之和;然后求kill所有怪物的情况下英雄的受伤值最小是...原创 2019-08-31 20:25:48 · 406 阅读 · 0 评论 -
K. Center(几何+贪心)
这道题有思路,但是时间不够了,所以没来得及写出来,比赛结束之后我才按照思路写了一遍就AC了;当时没想出来…脑壳懵逼状态QAQ;题意:给你n个点去找其他点使得找的其他点的数量最小,使得所有点都关于同一个中心有对应的点与之中心对称;比如这种:那么就不需要添加点了,因为他本来就可以关于p点对称了;然后我和队友写了写,如果我去枚举每两个点之间的中心,然后记录出现的次数;那么不就可以直接取重叠...原创 2019-09-07 19:08:36 · 1283 阅读 · 0 评论 -
B. Zmei Gorynich(贪心+细节)
题意:有一个怪物初始化有x个头,然后你有n种攻击方式;每种攻击方式对怪物造成的伤害位:看掉了怪物min(d,x)个头,然后如果怪物头的数目>0,那么他就会在你攻击之后重新生成h个头;问最小的攻击次数使得怪物over;其实这道题我刚开始用的结构体比值去找的,估计因为精度问题吧;后来改了想法:1.如果我用最大的d去最后攻击怪物,是不是我能保证,关系洗白了并且怪物不可能洗白了还去+h个...原创 2019-09-13 18:56:22 · 433 阅读 · 0 评论 -
小sun的假期(贪心+逻辑思维)
这道题一看就是区间排序,但是怎么把没有安排的区间记录这就有点困难了;区间排序按照这样排序:bool cmp(Node a,Node b){ if(a.l==b.l)return a.r<b.r;//如果左区间相等,就按照右区间从小到大排序 else return a.l<b.l;//左区间不相等,那么久按照左边,从小到大排序;}举个例子,如果我这个区间经过排序成...原创 2019-09-15 15:30:49 · 366 阅读 · 1 评论 -
D. Swords(贪心思维)
题意:一共有n种剑,并且每种初始值为x把,然后进来y个人,他们在剧院的地下室没人拿走z把剑(这z把剑是属于同一种类型的),并且不同的人可以拿同种的剑;现在给出每种还剩下的剑,问最小的y值是多少?其实这道题我一看就明白了,不就是去a[i]的最大值为x吗?因为如果x比a[i]中的最大值还大了,那不就需要更多的人去拿剑了吗?所以我把x设为a[i]中的最大值,然后我把a[i]=Max-a[i]这个就是...原创 2019-09-21 18:57:51 · 414 阅读 · 0 评论 -
Problem A. Mischievous Problem Setter(贪心+sort)
题意:给你n个题的各自的难度系数和解决这个题需要的时间(分钟为单位),问在m分钟内他能解决最多多少个题;解题条件:必须是从easy到hard;所以这道题就是签到题了;直接用结构体根据Dsort一下,注意这里如果a.D==b.D那么就应该把花费时间小的排到前面去,所以最后for一遍记录答案就OK了;AC代码:#include<bits/stdc++.h>using names...原创 2019-10-04 20:01:36 · 351 阅读 · 0 评论 -
Selfish Grazing(区间+贪心)
题意:就是个你n个区间,求独立区间的个数(也就是没有overlap(重叠)的区间(除开尾端点和下一个的头端点重叠));这道题我一看,本来想用差分,结果想了想行不通,之后就想pair或者struct区间排个序,然后贪心的找;结果还是对的;思路:比如给定几个区间:那么我去找独立的区间,那肯定是p[i].second<=p[i+1].first;所以我就可以这样for:先另一个t=...原创 2019-08-21 15:26:24 · 170 阅读 · 0 评论 -
P1007 独木桥(思维题+贪心)
这道题题意就是知道士兵的位置,然后不知道他们走的方向,当两个士兵相遇时,那么另一个士兵就会转身下桥,注意他在下桥的同时并不影响他对面士兵下桥的时间(因为一个士兵下桥,而另一士兵也跟在后面一起动的);所以就只需要找每个士兵到两个端点的距离的最大值就是最大时间了;而找最小时间,就是找每个士兵到两个端点的距离的最小值的最大值,意思就是这个意思:那这个肯定就是位置在6的士兵是最后一个走的;所...原创 2019-08-25 20:42:13 · 468 阅读 · 0 评论 -
B. Block Adventure(贪心+模拟讨论)
这题虽然我比赛的时候没过,但是我后来补的时候自己还是写出来了;好开心嘻嘻;比赛的时候我把题理解错了QAQ,我以为hi表示一个block的高度QAQ(该打脸了QAQ);结果后来补题才发现,所有block高度是一样的;题意:给你n列,并且ai(1<=i<=n)表示每一列所拥有的block个数,同时你有一个bag,它无限大;你可以有以下操作:1.如果你现在正在第i column上面...原创 2019-08-12 15:05:32 · 380 阅读 · 0 评论 -
Election Time(结构体+排序)
这道题,根据题意就很容易写出来了,因为先比第一轮,所以先排序第一轮,然后选出K个之后再在K个里面找票数最多的就OK了;#include<bits/stdc++.h>using namespace std;struct Cow{ int first,second; int index;//注意这里需要标记下标,因为sort排序会乱}c[50010];bool cmp(C...原创 2019-08-01 10:57:13 · 372 阅读 · 0 评论 -
C - Triangle Partition HDU - 6300
这道题是一个贪心算法,其实自己仔细想一下是可以写的,我们只需要管x坐标,因为题目上说了不可能有三个点共线,所以可以想一下只要他们的x坐标不同那么就能三个x值构成一个三角形,这样结果就出来了。读者可以做一下每个点再x轴上投影就可以了,也可以做x相等的点,同样可以这样构成,所以只需要记录x坐标值然后sort()一下就出来了注意是三个点构成一个三角形,所以需要跳下标,这里用了struct按照x递增...原创 2019-07-20 10:09:36 · 136 阅读 · 0 评论 -
C0003 [1998提高组-B]联接整数(贪心+链接字符串排序(char指针函数使用))
#include<bits/stdc++.h>using namespace std;typedef long long ll;struct St{ char ch[500];}; bool cmp(St a,St b){ char c1[500],c2[500]; strcpy(c1,a.ch); strcpy(c2,b.ch); strcat(c1,b.ch...原创 2019-08-03 21:58:05 · 151 阅读 · 0 评论 -
A - Important Exam(贪心+枚举(就是注意统计个数))
其实这道题看案例就可以明白,然后数据也不大,所以我第一时间想到的就是对于一道题的答案尽可能多的学生写对,这样才能保证拿到的总分最高,主要有点需要思维的是如何枚举的问题,其实直接开个一维string就够了,然后枚举每列;统计出现相同字母次数最多的就行,之后用:个数*分数,就是这个题所对应的所有学生答对的最大分数(注意分数需要用一个数组来存,这样才能在逻辑上对应每个题所对应的答案的下标);AC代...原创 2019-08-06 12:32:36 · 365 阅读 · 0 评论 -
J - Books(有点迷惑人的思维题(有点像贪心但又不完全是))
这道题我开头理解错了,认为只能从前往后选(遇见就必须选),但是题上说的是可以跳着选,并且选了后面的不能选前面的(就是不能倒起来);所以尽可能买又便宜又能使得money最大化,这个主要难点在于如何跳过中间大的,其实一个if-else就OK了首先应该统计0的个数如果个数>m个那么就肯定不可能了,其次比较m==n是不是成立,如果成立了那肯定就是Rich了;这两种极端谈论完了之后,最后就只有...原创 2019-08-08 17:32:26 · 212 阅读 · 0 评论 -
E - Arrays(贪心)
这道题题意:从a数组中选k个,从b数组中选m个,保证k个里面的任意一个都小于一m里面的任意一个,很明显,最优的选择就是选a里面k个最小的,b里面m个最大的;然后用k个里面最大的,和m个里面最小的比较,因为如果a里面k个中最大的都小于了b里面m个中最小的,那么后面a的k-1个中肯定都小于了;所以sort两个数组就出来了;#include<bits/stdc++.h>//E - A...原创 2019-08-10 15:06:56 · 107 阅读 · 0 评论 -
L - Array Splitting(枚举+数学+思维+贪心)
这道题题意:就给一个递增的数组,然后把它分为k份,每份的不能有交集(就是不能重叠),计算出每份的最大值-最小值,之后把每份的计算的值求和,问在分成k份之后这个和最小为多少;这个题可以这样理解:因为要分为K部分,并且每部分连续;所以我可以假设分为这K部分:那么它们最终的值为:变形:可得:所以答案显而易见了:因为a[n]-a[1]是固定的,所以只需要把后面的变的尽可能大就OK...原创 2019-08-11 11:43:42 · 192 阅读 · 0 评论 -
B. Equal Rectangles(贪心)
题意:给你4*n个数,然后判断是不是能够构成n个面积相等的矩形;我首先想的是sort一下然后来前后匹配因为:如果a,c取最大和最小值,那么b,d就必须是中间的值,小的乘小的肯定不等于大的乘大的;所以我按照这个思路写的;然后前后扫一遍来判断就OK了;但是需要注意:输入的时候需要统计相同数字出现的次数;然后最后因为如果相同数字出现奇数个或者对应的边长相同长度个数不等了,那么就肯定不能构成了...原创 2019-08-15 13:01:12 · 174 阅读 · 0 评论 -
E. Boxers(贪心+移出多余空位)
题意:给你n个数,然后你只能对一个数做一次操作使得这个数组里面的不同的数个数最多;操作:1.你可以对一个数-1(注意体重不能为0);2.你可以对一个数+1;3.你可以对这个数不做修改;这道题可以这样思考,就是sort之后,然后把尽可能大的+1使得给前面小的数腾出向上的空位(因为这样就可以把范围扩大,使得不同的数尽可能多一些)这个可以用集合或者数组模拟一遍;#include<b...原创 2019-08-15 13:30:01 · 236 阅读 · 0 评论 -
A - Saruman's Army(贪心几何)
这道题就是求找到若干个点,使得在这些标记的点的位置上半径为R内的区域内至少有一个标记过的点,并且在确定标记的点后使得能够覆盖所有点,并且使得自己所标记的点最少;这道题给了思维开发感觉,因为这道题可以用贪心算法来写;首先分析:如果我从最左边开始找第一个点的R区域内的第一个最后边的点,那么我就应该标记最右边的这个点,然后一这个点为圆心找在其R区域内的最右边的点;这样就以标记的那个点为圆来包含...原创 2019-07-27 20:30:25 · 193 阅读 · 0 评论