返回顶部

随笔分类 -  贪心

摘要:题意:有$n$本书,A和B都至少要从喜欢的书里面读$k$本书,如果一本书两人都喜欢的话,那么他们就可以一起读来节省时间,问最少多长时间两人都能够读完$k$本书. 题解:我们可以分$3$种情况来存,即: ​ 1.\(a=b=1\). 2.\(a=1,b=0\). 3.\(a=0,b=1\). 对于2和 阅读全文
posted @ 2020-06-29 13:49 _Kolibri 阅读(239) 评论(0) 推荐(0)
摘要:题意:有一组数,每次操作可以将某个数移到头部或者尾部,问最少操作多少次使得这组数非递减. 题解:先离散化将每个数映射为排序后所对应的位置,然后贪心,求最长连续子序列的长度,那么最少的操作次数一定为$n-len$. 感觉不好解释,直接上图,其实就是排序后它们一定是连续的,所以我们就求一个最长的连续的, 阅读全文
posted @ 2020-06-19 13:11 _Kolibri 阅读(293) 评论(0) 推荐(0)
摘要:题意:有一个字符串和一组数,可以对字符串删去任意字符后为数组的长度,且可以随意排序,要求修改后的字符串的每个位置上的字符满足:其余大于它的字符的位置减去当前位置绝对值之和等于对应序列位置上的数. 题解:贪心,我们发现,数组中$0$的位置一定对应字符串中最大的字符,所以我们从这个位置来构造,我循环来找 阅读全文
posted @ 2020-06-19 12:26 _Kolibri 阅读(362) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n$的数组,找一段最长子数组,使得其元素和为$x$,如果存在,输出子数组的长度,否则输出$-1$. 题解:这题我们要从元素和$sum$来考虑,首先,如果原数组的所有元素都被$x$整除,那么条件不成立. ​ 假如原数组的$sum$不被$x$整除,那么长度就为$n$,如果被$x$整除 阅读全文
posted @ 2020-06-15 00:59 _Kolibri 阅读(139) 评论(0) 推荐(0)
摘要:题意:你有$a$个树枝和$b$个钻石,$2$个树枝和$1$个钻石能造一个铁铲,$1$个树枝和$2$个钻石能造一把剑,问最多能造多少铲子和剑. 题解:如果$a\le b$,若$b\ge 2a$,那么一直取$b$即可,否则就要两两轮流减,即$(a+b)/3$,取个min即可. 代码: #include 阅读全文
posted @ 2020-06-12 18:54 _Kolibri 阅读(226) 评论(0) 推荐(0)
摘要:题意:有$n$个点,$m$条边,现在要给这些点赋值,,每次只能赋给某一点的四周(所连边)的最小没出现过的值.如果不能按照所给的数赋值,输出$-1$,否则输出赋值顺序. 题解:我们用$pair$记录最后一行所给的数和位置,不难想,每次肯定是赋最小的数,所以我们对其排序,然后遍历取位置,看这个位置周围能 阅读全文
posted @ 2020-06-10 17:45 _Kolibri 阅读(169) 评论(0) 推荐(0)
摘要:题意:给你一棵树,每次可以去掉叶节点的一条边,Ayush先开始,每回合轮流来,问谁可以第一个把$x$点去掉. 题解:首先如果$x$的入度为$1$,就可以直接拿掉,还需要特判一下入度为$0$的情况,否则,仔细想一想,因为每次都不想让对方赢,所以摘到最后,一定会出现$x$连的都是叶结点的情况,所以此时我 阅读全文
posted @ 2020-06-04 13:43 _Kolibri 阅读(148) 评论(0) 推荐(0)
摘要:题意:给你一组全是$2^d\ (d\ge0)\(的数,询问q次,每次询问一个数,问这个数是否能够由原数组中的数相加得到,如果能,输出最少用多少个数,否则输出\)-1$. 题解:首先贪心得出结论:如果情况成立,那么最少的情况一定是优先用数组中大的数,然后我们用桶记录数组数的个数,从$inf$开始枚举, 阅读全文
posted @ 2020-05-27 14:40 _Kolibri 阅读(151) 评论(0) 推荐(0)
摘要:题意:一年有$n$个月,每月有$d_$天,找出连续的$x$天,使得这$x$天的日期总和最大,任意一年都能选. 题解:首先要先贪心,得到:连续的$x$天的最后一天一定是某个月的最后一天,我们先预处理两个前缀和,分别记录连续的天数和总日期数,然后枚举,二分找出一个区间,得出这个区间的总日期数再加上区间最 阅读全文
posted @ 2020-05-27 14:23 _Kolibri 阅读(213) 评论(0) 推荐(0)
摘要:题意:你有$n$天的时间,这段时间中你有$m$长考试,$s$表示宣布考试的日期,$d$表示考试的时间,$c$表示需要准备时间,如果你不能准备好所有考试,输出$-1$,否则输出你每天都在干什么,如果这一天你有考试,输出$m+1$,如果你要准备第$i$场考试,输出$i$,否则休息,输出$0$. 题解:数 阅读全文
posted @ 2020-05-22 02:07 _Kolibri 阅读(83) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n$的序列,要求在$[1,10^9]$中找一个$x$,使得序列中恰好$k$个数满足$\le x$.如果找不到$x$,输出$-1$. 题解:先对这个序列排个序,然后首先要注意$k=0$的情况 如果$k=0$并且序列中含有$1$,那么我们无论如何都找不到比$1$小的数,输出$-1$, 阅读全文
posted @ 2020-05-20 17:19 _Kolibri 阅读(134) 评论(0) 推荐(0)
摘要:题意:给你$n$个数,每次可以使某个数++,--,或使某个数--另一个++,分别消耗$a,r,m$.求使所有数相同最少的消耗. 题解:因为答案不是单调的,所以不能二分,但不难发现,答案只有一个峰,所以我们可以三分高度,然后写个check函数贪心一下即可. 代码: #include <iostream 阅读全文
posted @ 2020-05-20 12:29 _Kolibri 阅读(153) 评论(0) 推荐(0)
摘要:题意:给你一组人$a$,现在要将这些人进行分组,对于$i$,只有某一组的人数$\ge a_$时,$i$才可以加入这个组,问最多能够有多少组,(不必将所有人都选用). 题解:我们将所有$a_\(相同的用一个桶存一下,然后升序遍历这个桶,假如桶里面的人数\)\ge a_\(,那么它们就能够组成一组,之后 阅读全文
posted @ 2020-05-17 13:32 _Kolibri 阅读(197) 评论(0) 推荐(0)