贪心算法题目
文章平均质量分 69
逍遥Fau
为伊蕾娜献上心脏!
展开
-
Codeforces1567D Expression Evaluation Error (贪心)
题目链接: Expression Evaluation Error大致题意给定s,ns, ns,n 表示你需要找到nnn个十进制, 并且这nnn个数字加和为sss.现在把你找到的nnn个数字看成11进制. 要求这nnn个数字在11进制下尽可能大.解题思路贪心首先如果我们可以保证不拆分sss(即: sss的所有数位之和大于等于n), 那么我们转化为11进制后, 是可以保证贡献不损失的.反之, 我们一定要拆分sss, 且我们希望尽可能拆分低位.我们由于最终一定要选出nnn个数字, 因此我们不妨原创 2021-09-11 10:30:05 · 117 阅读 · 0 评论 -
AtCoder Packing Under Range Regulations (贪心 模拟)
题目链接: Packing Under Range Regulations大致题意有n个球, 其中第i个球可以放在[l, r]位置, 每个位置只能放一个球.问: 能否使得n个球都有位置放.解题思路模拟 贪心我们考虑模拟怎么放球最优.首先我们可以按照区间左端点去排序, 如果左端点相同, 我们肯定先放右端点最小的.假设当前有四个球[2,2],[2,3],[2,5],[3,4][2, 2], [2, 3], [2, 5], [3, 4][2,2],[2,3],[2,5],[3,4], 如果原创 2021-08-15 22:27:20 · 181 阅读 · 2 评论 -
Codeforces1551C Interesting Story (贪心)
题目链接: Interesting Story大致题意给出n个仅包含小写字母’a’ ~ 'e’的字符串.要求: 选择尽可能多的字符串, 并且满足: 在选择的字符串中, ‘a’ ~ 'e’中的某一个字符比其他所有字符加和还要多. (相当于把所有选择的字符串组成了一个新串, 要求某个字符数量多于其它所有的.)解题思路贪心我们设target字符为最多的那个字符, other为其它所有的字符.不妨枚举target=‘a’~'e’的所有情况: 由于我们希望选择尽可能多的字符串, 因此我们可以贪心选择ta原创 2021-07-28 22:39:25 · 170 阅读 · 0 评论 -
Codeforces1551B2 Wonderful Coloring - 2 (贪心)
题目链接: Wonderful Coloring - 2大致题意有一个长度为n的序列, 你有m种颜色, 编号1~m. 你要选择给每个位置涂上某种颜色或不涂色.要求: ①最终每种颜色被涂色的位置数量相同 ②不同位置的相同数字不能涂同种颜色 ③最大化每种颜色的涂色数量输出最终的涂色策略.解题思路贪心 本题思维基于B1的做法.我们首先考虑对于序列的所有数字从小到大排序, 那么对于相同的数字而言, 如果数字个数大于m, 则我们应该舍弃多余的数字. 然后对于相同的这部分逐一涂色.由于我们需要保证每种颜原创 2021-07-28 19:29:16 · 330 阅读 · 0 评论 -
Codeforces1380C Create The Teams (贪心)
题目链接: Create The Teams大致题意有n个数字, 希望你把这些数字分成尽可能多的组. 要求: 每组数字的数字个数乘以该组数字的最小值应当大于等于m.注: 你不必用完所有的数字. 只需要最大化组数即可.解题思路贪心 本题算很典型的 排序 + 贪心 类型的题目我们先考虑对于一组数字而言, 如果已经存在一个最小的数字, 则后续组中再放数字, 我们没必要放大的数字, 只需要较小的即可.那我们现在考虑把所有数字从小到大排序, 我们发现此时有一个问题: 可能存在我不选某个数字, 然后我选后原创 2021-07-28 09:10:05 · 118 阅读 · 0 评论 -
Codeforces1466C Canine poetry (思维 贪心)
题目链接: Canine poetry大致题意给出一个仅由小写字母组成的字符串. 你可以把任意位置的字符修改为任意小写字母.问: 至少进行多少次修改, 可以使得字符串中所有长度大于1的连续子串不为回文串.解题思路思维长的回文串内部一定含有短的回文串, 因此如果我们想破坏一个回文串, 我们应破坏其内部的所有短回文串. 这样破的坏的才"彻底".考虑到字符串的回文串只有两种: AA型 和 ABA型. 因此我们只需要枚举两种回文类型进行判断即可.贪心考虑到如果我们从前向后扫描, 如果此时出现了AA原创 2021-07-26 09:59:28 · 147 阅读 · 0 评论 -
Codeforces1547D Co-growing Sequence (构造 贪心 位运算)
题目链接: Co-growing Sequence大致题意定义:一个长度为n的序列a, 如果满足 a[i] & a[i + 1] == a[i], i ∈ [1, n), 则称该序列为增长的两个长度均为n的序列a, b. 现构造出长度为n的序列c, 使得 c[i] = a[i] ⊕ b[i], i ∈ [1, n], 若c序列是增长的, 则称序列a和b是同增的现给出序列a, 让你构造出一个字典序最小的序列b, 使得a和b是同增的.解题思路我们首先对增长的序列进行分析:如果原创 2021-07-11 20:11:45 · 424 阅读 · 1 评论 -
Codeforces1355B Young Explorers (贪心)
题目链接: Young Explorers大致题意给你n个人, 你需要给这些人组队.每个人有个对应的ai值, 表示这个人如果组队了, 队伍应当人数>=ai.问: 最多能组出多少个队伍. (有些人可以没有队伍)解题思路贪心 + 排序我们把所有的人按照ai的值从小到大排序.然后从前向后遍历排序后的数组, 并记录一个sum值, 表示当前已经遍历过, 且没有队伍的人数. 如果sum == a[i], 则表示我们可以让这sum个人组成队伍.关于思路正确性:我们目的是成尽可能多的队伍, 所以原创 2021-06-24 15:05:31 · 87 阅读 · 0 评论 -
CF1515D Phoenix and Socks (贪心 思维)
题目链接: Phoenix and Towers大致题意给你n只袜子, 有l只左袜子, r只右袜子. 每只袜子有颜色c.你可以执行两种操作: ① 左袜子变成右袜子, 右袜子变成左袜子 ② 把这个袜子改成任意一种颜色问: 最少执行多少次操作, 使得n只袜子可以相互配对(一左一右, 且颜色相同)解题思路贪心 + 思维首先我们明确一点, 如果此时我们都是一种类型的袜子(不妨认为是左袜子), 此时他们的颜色还都不一样, 那么我们必然需要操作2次, 才能使得袜子成功配对一对.除此之外, 如果不原创 2021-06-03 19:53:34 · 398 阅读 · 0 评论 -
CF1515C Phoenix and Towers (贪心)
题目链接: Phoenix and Towers大致题意给你n个数, 要求你把这些数字分成m组, 使得任意两组之间的差值不超过x.解题思路贪心 这有点像之前cf的一个B题, 大概是说放积木, 问最少能放几层.我们遍历n个数字, 每次把当前这个数字放到总和最小的组里即可.因为我们最后要求任意两组之前的差值尽可能的小, 相当于让m组数尽可能的平均. 我们贪心去做即可.到这里你发现, 可能我这样的做法并不会使得这m组数尽可能的平均, 因为我们也没有排序.给出一个例子: 对于3个数, 分成2组的情原创 2021-06-03 19:33:50 · 221 阅读 · 0 评论 -
CF1526C2 Potions (Hard Version) (贪心 + 线段树)
题目链接: Potions (Hard Version)大致题意有n个数, 编号从1~n, 第i个位置的值为a[i].从编号为1的数字开始选择, 一直到编号为n的数字. 对于第i个数字, 你可以选或者不选. 若选择的话, 总和会加上a[i].要求: 你需要选择尽可能多的数字, 并且保证选择每一个数字后, 总和不为负.解题思路贪心 + 线段树 (我看大家都是 带反悔的贪心做的, 代码太短了, 让我来个长的)贪心方向: 我们对于所有正数, 直接取即可. 对于负数的情况, 我们也肯定是优先取大的基原创 2021-05-29 20:52:34 · 343 阅读 · 2 评论 -
Codeforces495C Treasure(贪心)
题目链接: Treasure大致题意给定一个字符串, 仅由’(’ ‘)’ ‘#’ 组成, 且至少包含一个’#’. 你可以在#处添加至少一个’)’. 要求序列中任何位置的前缀和中, '(‘的个数大于等于’)'的个数. 且最终括号匹配.问能否对于每个#位置给出一种合法的放置个数, 使得满足题目要求. 若不能满足则输出-1.解题思路贪心, 很明显的贪心题目, 因为他要求①前缀和左≤右, ②最终序列匹配.考虑到贪心做法, 我们不妨先假设每个#位置我们都只放1个右括号, 剩下差的括号, 我们都放在最后原创 2021-04-27 19:53:31 · 121 阅读 · 0 评论 -
Duizi and Shunzi(贪心)
题目链接: Duizi and Shunzi大致题意给你n张牌, 每张牌都是1~n之中的数字, 你可以选择两张数值一样的牌凑成一个对子, 你也可以选择三张数值连续的牌凑成顺子. 每张牌只可以使用一次.问: 最多能凑出多少对子和顺子.解题思路首先我们需要产生尽可能多的对子和顺子, 那么一个对子需要两张牌, 一个顺子需要三张牌.因此优先级: 对子 > 顺子考虑到题目中所有的ai都 <= n, 因此我们可以用桶排序的思路来记录每一个数字出现的情况.由于优先级的因素, 因此对于一张牌而言原创 2021-04-24 16:37:33 · 211 阅读 · 1 评论 -
Air Conditioner Codeforces 1304C
题目链接: Air Conditioner大致题意有一家饭店, 初始时温度为m. 有n个客人, 第i个客人将会在t时刻到来, 他喜欢的温度为[l, r].每一时刻, 我们可以选择饭店升温1度, 或者降温1度, 或者维持当前温度.问: 能否让这n个客人到来的时候, 饭店温度都是他们喜欢的温度.解题思路首先我们分析一下, 对于某个客人, 如果当前的饭店温度已经是他喜欢的温度, 那么我们是否需要调整温度, 可以暂时认为取决于下一个客人. 如果下一个人要求的温度相对于更低一点, 则我们需要把温度尽可能调原创 2021-04-05 10:02:14 · 235 阅读 · 0 评论 -
Water Level
题目链接: Water Level大致题意有一个饮水机, 里面有k升水, 每天早上你可以像里面添加y升水, 每天晚上饮水机会被喝掉x升水.问: 是否能在t天内, 使得饮水机的容量一直处于[l, r].解题思路首先这个题先进性一下左边界化简, 只需要让 k和r 都减去l即可. 之后都只需要考虑水的容量是否会大于r即可此问题我们可以分类讨论: ①如果 x == y, 那么每天的加水和喝水量是相同的, 因此只需要判断第一天能否加水, 以及能否喝到水即可. 往后的天数都会进行循环. ②如果x &原创 2021-03-26 09:12:33 · 367 阅读 · 0 评论 -
Too Many Segments (hard version)
题目链接: Too Many Segments (hard version)大致题意给定两个正整数n和k, n表示有n个线段(都在OX轴上). 接下来给出n组l, r, 表示每一个线段的左右端点.对于每一个点, 如果被线段的覆盖次数大于k, 则认为这个点是不好的, 所以我们需要删除一些线段, 使得所有的点都是好的点.问: 最少删除多少条线段可以使得所有的点都是好的点.解题思路很明显, 对于每一个点, 我们都需要知道他被多少条线段所覆盖了, 而每一次给定的都是一个区间.=> 我们需要做到快原创 2020-10-25 17:01:46 · 196 阅读 · 0 评论 -
Increase and Copy
题目链接: Increase and Copy大致题意:给定一个数组, 里面现在有一个初始值为1的元素. 每次你可以对数组进行下列两种操作中的一种:①复制一个数组中的元素, 并将其放到数组末端.②选择一个数组中的元素, 将其加一.问: 至少经过多少次操作, 可以使得数组中的元素和等于给定的数字n.解题思路:我们可以采用逆向思维, 即: 如何将给定的数字进行划分.由于让元素+1 和 复制元素 都需要进行一次操作, 所以我们可以有一个猜测——让操作①和操作②的次数尽可能接近. 假设n是一个比较大原创 2020-10-07 00:21:33 · 207 阅读 · 0 评论 -
Buy and Resell
题目链接: Buy and Resell大致题意:有n个城市, 在每个城市中你可以选择花费a[i]的价格买一个能量块, 也可以选择以a[i]的价格卖出一个能量块(前提是你要有能量块可以卖). 你会从1号城市依次走到n号城市, 每次可以选择买或者卖或者什么也不做. 在初始你有无限多的钱的前提下, 问你能获得的最大利润, 以及在最大利润的前提下最小的买卖次数.解题思路:首先如果一件物品买了后再卖了能赚钱, 则我们一定会采取这种方案, 因为题目要求最大利润优先, 最小的买卖次数则是不做无意义的买卖, 如花原创 2020-09-19 16:15:28 · 385 阅读 · 0 评论 -
Fishing Master(贪心算法)
题目链接: Fishing Master大致题意:湖里有n条鱼, 每钓一条鱼需要花费的时间为m(可以选择钓第几条鱼). 只能同时烹饪一条鱼, 烹饪第i条鱼所花费的时间至少为a[i], 可以在烹饪的期间去捕鱼. 问最少需要花费多少时间将n条鱼烹饪完毕.解题思路:贪心算法最理想的情况下, 需要花费的时间res = m + 烹饪所有鱼的时间总和.但是有的情况下, 我们并不能在烹饪每条鱼时都恰好能去钓鱼, 所以我们需要将有些鱼多烹饪一些时间, 去额外钓一些鱼. 我们要做的也就是去尽可能的减少额外花费的时原创 2020-09-13 18:37:12 · 623 阅读 · 0 评论 -
Boboniu Chats with Du(贪心 + 前缀和)
题目链接: Boboniu Chats with Du大致题意:给你n个数字, 让你给这n个数字进行合理排序, 使得结果这n个数字之和最大.条件: 如果某个位置i出现了大于m的数字, 则接下来的d个数字将不进行加和计算(如果后面不足d个数字则忽略到结束).解题思路:贪心即可.我们将数字整体分为两类, a类为大于m的数字, b类为小于m的数字. 我们可以知道答案至少为所有b类数字之和.倘若我们此时选择1个a类数字, 则我们一定要选最大的a类数字, 且一定要把他放在最后一位是最优的(因为这样不会导原创 2020-08-26 14:53:08 · 454 阅读 · 0 评论 -
Fujiyama Thursday
题目连接: Fujiyama Thursday大致题意:有n辆车, 4 * n个人, 1车上4个人, 每个车的车速不同, 每个人的吃饭速度也不同, 一辆车的四个人以吃饭最慢的那个人为准. 希望你平衡时间, 输出最长花费时间.解题思路:贪心, 模拟即可. 最快的车上吃饭最慢的人, 最慢的车上吃饭最快的人.AC代码:#include <bits/stdc++.h>typedef long long ll;using namespace std;int c[55], e[55]; i原创 2020-06-30 17:39:37 · 3396 阅读 · 0 评论 -
Managing Difficulties(map容器)
题目连接: Managing Difficulties题目: 略大致题意:t组输入, 每组给你n个数字, 问你这n个数字中能找出多少个等差三元组.解题思路:假设有下标为 i, j, k(i < j < k)的三个元素满足题意, 那么由等差队列的性质我们可知, 2a[j] = a[i] + a[k]得出 a[i] = 2a[j] - a[k]至此, 我们发现我们只需要不断枚举a[j]和a[k]即可通过公式找出对应的a[i].至于为什么要找a[i], 而不是a[k]: 当我们枚举中间原创 2020-06-15 16:23:38 · 611 阅读 · 0 评论 -
String Coloring (hard version)
This is a hard version of the problem. The actual problems are different, but the easy version is almost a subtask of the hard version. Note that the constraints and the output format are different.You are given a string s consisting of n lowercase Latin原创 2020-03-08 18:42:45 · 160 阅读 · 0 评论 -
String Coloring (easy version)
This is an easy version of the problem. The actual problems are different, but the easy version is almost a subtask of the hard version. Note that the constraints and the output format are different.You are given a string s consisting of n lowercase Lati原创 2020-03-08 12:52:03 · 187 阅读 · 0 评论 -
Minimize the Permutation
题目连接: Minimize the Permutation题目:给定一个长度为n的数组,数组由1到n的任意顺序的n个不同整数组成(这n个数保证不重复),对于给定的数列,最多可以执行n-1个操作(可能根本不执行任何操作)。第i种操作允许交换i和i+1两个位置的值。每种操作最多只能执行一次。操作可以按任意顺序执行。你的任务是通过按一定顺序执行某些给定操作找到最小字典序的数列. 例如,让我们考虑数...原创 2020-02-05 19:02:22 · 500 阅读 · 1 评论