合集-贪心
摘要:题目链接 CF1904B Collecting Game 题意简述 给你一个由 \(n\) 个正整数组成的序列 \(a\) 和一个分数。如果你的分数大于或等于 \(a_i\),那么你可以将分数增加 \(a_i\),并从序列中删除 \(a_i\),你需要求出对于每一个 \(a_i\) 为你的分数时你可
阅读全文
摘要:一道好题。 题目链接 考虑离线操作。 我们可以设 \(a_i\) 为当前 \(i\) 表示的数字,然后直接倒序操作,运用并查集的思想,可以 \(O(n)\) 通过此题。 参考代码: #include<bits/stdc++.h> using namespace std; long long n,a[
阅读全文
摘要:题目链接 简单贪心。 由于我们需要判断无解情况,于是我们可以在做的过程中记录答案。 比较容易发现,对于每个时间段,我们肯定是优先复习日期较近的考试的,贪心了这一点,就能轻松 AC 了。 参考代码: 点击查看代码 #include<bits/stdc++.h> using namespace std;
阅读全文
摘要:题目链接 P9253 [PA 2022] Ornitolog 2 题目简述 给定一个音高序列,输出最少要修改多少整数才能使这个序列成为交替鹡鸰鸟鸣的音高序列。 题意分析 操作后的音高序列总共有 \(2\) 种可能: 音量由高变低再由低变高; 音量由低变高再由高变低。 又因为大小范围是 \(10^4
阅读全文
摘要:原题链接 CF624B Making a String 题目简述 现在有 \(n\) 个字母,要将这些字母拼成一个尽可能长的字符串,但是每个字母出现的次数不能相等,求这个字符串长度的最大值。 解题思路 首先输入 \(n\),再输入每个字母出现的次数,最后建造一个桶,存储桶内的每个数字,使得桶内每个数
阅读全文
摘要:原题链接 CF1221B Knights 题目简述 在一个 \(n \times n\) 的棋盘上放置黑马和白马,给出一个放置方式,使得黑马和白马之间的冲突数最多。 解题思路 这道题是一道贪心构造题,因为马每一步有 \(8\) 种移动方案,而我们假设将这个棋盘进行黑白交替染色,则会得到下图: 不难得
阅读全文
摘要:原题链接 CF1585B Array Eversion 题目简述 现在有一个长度为 \(n\) 的序列 \(a\),每次操作将 \(a\) 中不大于序列 \(a\) 中最后一个数的元素按照在 \(a\) 序列中的顺序放入 \(b\) 序列中,大于序列 \(a\) 中最后一个数的元素同样按照在 \(a
阅读全文
摘要:原题链接 CF468A 24 Game 题目简述 现在有一个序列 \(n\) 包含 \(n\) 个整数 \(1 \sim n\),如果我们能经过加减乘三种操作让这个序列只剩下 \(24\),如果可以,输出 YES 并给出构造方案,否则输出 NO。 解题思路 首先不难看出,如果 \(n\) 小于 \(
阅读全文
摘要:原题链接 P9515 「JOC-1A」限时签到 题意简述 有一条公路上有 \(n\) 个商店,每个商店分别在不同的时刻开放,求如何在 \(t\) 时刻之前到达 \(f\) 点并且到达最多开放的商店的数量,特别的,一个时刻只能走一格。 解题思路 这一道题是一道贪心题。首先,因为要在 \(t\) 时刻之
阅读全文
摘要:原题链接 CF283A Cows and Sequence 题目简述 给定一个初始为空的序列 \(a\),并给出 \(3\) 种操作方式: 将 \(a_1 \sim a_x\) 均加上 \(y\); 将 \(a\) 序列末尾增加一个正整数 \(x\); 将 \(a\) 序列的最后一个数字给去掉; 现
阅读全文
摘要:题目链接 诈骗题。 容易证明,翻转任意一个“灵异区间”时,整个序列的“灵异区间”的数量总数都不会变,因此我们直接输出原数列的“灵异区间”的总数即可。 参考代码: 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换题?
阅读全文
摘要:题目链接 CF1914E1 Game with Marbles (Easy Version) CF1914E2 Game with Marbles (Hard Version) 题意简述 小 \(A\) 和小 \(B\) 想要玩一个游戏,规则是这样的,每个人手里有 \(n\) 种类型的弹珠,每种类型
阅读全文
摘要:题目链接 CF1925C & CF1924A Did We Get Everything Covered? 解题思路 容易看出,我们可以开个桶存储当前搜索过的字母,当所有字母都有了之后就将桶清空,然后从当前搜到的位置继续存储,如果桶的清空次数小于 \(k\) 次则一定有至少一个字符串无法达到要求,这
阅读全文
摘要:盲猜没人用此做法 题目链接 CF1927D Find the Different Ones! 解题思路 考虑分块,在一块内的数当且仅当他们是连续的且权值相同,并记录下他们的左右端点同时记录每一个数在哪个块内,对于每个块维护它的左右端点,然后对于每组询问如果 \(l,r\) 在同一个块内,那么 \(l
阅读全文
摘要:链接 下位蓝。 题目可以用尺取法 + 区间加的方式来做。 参考代码: 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换题? */ #include<bits/stdc++.h> using namespace std
阅读全文
摘要:题目链接 P8866 [NOIP2022] 喵了个喵 解题思路 这种题放在 T2 还是把总得分设为四道题目的得分的异或值吧。 调了一个下午。 测试点 \(1 \sim 3\): 一个显然的结论,每个栈最多有两个数字的时候最优。 我们可以留下一格栈作为辅助栈,用来消除用,其他栈随便放,容易发现,一个元
阅读全文
摘要:链接 花花场,被前两题给背刺了。 还是来讲下这题思路吧。 算法一 随机选取两个数,正确的概率约为 \(1\%\)。 期望得分 \(0\)。 算法二 两两之间都选一遍,需要选 \(n \times (n-1) /2\) 次。 然后建一个完全图容易求出每个数的大小。 期望得分 \(0\)。 算法三 正片
阅读全文
摘要:感觉 D2 比 D1 简单 /kx /kx /kx 链接 算法一 发现一个数 \(x\) 为 \(2^k(0 \le k)\) 时一定无法拆分。 此时直接分讨即可。 算法二 发现一个数 \(x\) 满足化为二进制下数位和为 \(2\),可以拆成两个 \(2\) 的非负整数次幂的数。 此时直接分讨即可
阅读全文
摘要:链接 套路题。 最小值: 排序后直接分讨即可。 最大值: 排序后枚举开头为 \(a_1\),\(a_n\) 的情况后双指针贪心即可。 代码: 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换题? */ #includ
阅读全文
摘要:链接 构造思路: 考虑直接构造 \(100 \times 100\) 的方格,然后前 \(50 \times 100\) 为黑格,后 \(50 \times 100\) 为白格,构造形如以下方式即可。 #.#.#.#.#.#.#.# ............... #.#.#.#.#.#.#.# .
阅读全文
摘要:链接 妙妙构造题。 很容易可以看出要构造出一种可以交换相邻两格数的操作。 这部分显然可以写个爆搜找到规律。 然后进行暴力操作即可。 代码也不长。 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换题? */ #incl
阅读全文
摘要:链接 很一眼。 容易发现除非操作时影响 \(1\) 这个数字,否则答案一定改变,直接特判影响到 \(1\) 这个数字的两种情况即可。 代码: 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换题? */ #includ
阅读全文
摘要:对下脑电波。 题目链接(luogu) 题目链接(at) 发现我们可以找出所有 \(x\) 当且仅当 \(x\) 为质数且 \(x \bmod 5 = 3\),这样任意五个数加起来就必定为合数了。 代码: 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp
阅读全文
摘要:链接 算简单题。 你发现最大值肯定可以用 \(n\) 次查出来。 然后可以证明 \(ans \le \frac{n}{k}\)。 总次数为 \(n + \frac{n}{k} \times k \le 2n\)。 代码: 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心
阅读全文
摘要:题目链接 CF1650D (luogu) CF1650D (codeforces) 解题思路 我们发现要想让第 \(i\) 个数变换一次就需要给第 \(i \sim n\) 中的一个位置做一次操作,因此我们很自然的就想到了倒推,容易证明这样是不劣的。 时间复杂度 \(O(n^2)\)。 参考代码 #
阅读全文
摘要:题目链接 CF1650E (luogu) CF1650E (codeforces) 解题思路 首先,你发现你只能改一个日期,那么我们肯定是改距离最近的旁边的两场考试,此时我们就可以将操作转化为删去一场考试并添加一场新考试的最小的休息时长,容易使用贪心 \(O(n)\) 解决。 总时间复杂度 \(O(
阅读全文
摘要:题目链接 CF1977B (luogu) CF1977B (codeforces) 解题思路 考虑通用做法。 我们发现如果直接用二进制来表示的话这个数会只包含 \(0,1\) 这两个数字。 发现这时阻碍我们构造的是连续的数字 \(1\)。 考虑消除连续的数字 \(1\)。 容易发现连续的数字 \(1
阅读全文
摘要:题目链接 CF1977C (luogu) CF1977C (codeforces) 解题思路 首先这题有一个简单的思路,就是当这个序列的 LCM 大于 \(10^9\) 时,显然取所有数字数字是合法的。 然后我们接下来考虑 LCM 小于等于 \(10^9\) 的情况。 发现这种情况 LCM 很小,且
阅读全文
摘要:链接(luogu) 链接(codeforces) 有一个结论就是每次操作直接取一个存在目前最左边的最小值区间即可。 但是我不会证啊...... 大家感性理解。 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换题? 打
阅读全文
摘要:链接 (Link) 一个好题。 就是说,你直接先求出这个数列的异或和,然后发现之后就可以两两匹配,如果无法匹配就默认这个数为 \(0\),然后做完了。 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换题? 打 cf
阅读全文
摘要:代码康复训练 2024.6.7 无所谓,随便贪。 直接取前 \(x\) 大的红苹果,前 \(y\) 大的绿苹果和和所有无色苹果合起来取最大的 \(x + y\) 个苹果的值加起来即可。 容易证明一定合法。 代码: 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是
阅读全文
摘要:代码恢复训练 2024.6.9. 链接 greedy。 从高往低枚举二进制位,check 方式显然。 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换题? 打 cf 不要用 umap!!! 记住,rating 是身外
阅读全文
摘要:代码恢复训练 2024.6.15(补) 链接 (luogu) 链接 (atcoder) abc 最水的 G 了吧。 你发现,你最后肯定全在在同一个点上不动,而且你一定可以在 \(n \times m\) 回合内走到这个点,因此我们直接 \(dp_{i,x,y}\) 表示走 \(i\) 步到 \((x
阅读全文
摘要:一个思想。 先计算出 \(a_i + b_j\) 的前 \(k\) 个,然后直接和这个和加上 \(c_k\) 再取前 \(k\) 个就行了。 代码: 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换题? 打 cf 不
阅读全文
摘要:原题大赛。 一句话做法:取当前最优的比取当前劣的要更优。 点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换题? 打 cf 不要用 umap!!! 记住,rating 是身外之物。 该冲正解时冲正解! Problem:
阅读全文
摘要:题目链接 CF1987C Basil's Garden 提示 不妨把这个序列当做一个弹簧来处理。 弹簧会产生连锁反应。 解题思路 我们发现这个序列的区间是一段一段的,我们可以将每一段都当成一个弹簧,每两个数都会多产生 \(1\) 的贡献,那么这个区间的贡献就是这个区间的最大值加上这个区间的长度减去
阅读全文
摘要:upd: 哎哎哎,原来的题解没怎么写证明被叉了 /yun 所以我来补下证明。 upd2: 修改代码,增加代码可读性。 题目链接 P10678 『STA - R6』月 解题思路 时间复杂度优于官解的做法。 首先我们观察到一个性质就是 \(\sum a_i = 2 \times (n - 1)\),因为
阅读全文
摘要:哎哎哎,题解区里怎么没我的做法啊 /yun。 于是就有了这篇题解。 题目链接 CF1702F Equate Multisets (luogu) CF1702F Equate Multisets (codeforces) 解题思路 首先我们发现,\(a\) 序列中的数字的末尾的 \(0\) 是无意义的
阅读全文
摘要:题目链接 CF402D Upgrading Array (luogu) CF402D Upgrading Array (codeforces) 解题思路 首先你会发现你一旦在第 \(i\) 个位置上做了一次操作后,那么你之后所有在第 \(j(i \le j)\) 个位置做的操作都是无效的,因为此时该
阅读全文
摘要:duel 到的。 题目链接 CF727D (luogu) CF727D (codeforces) 解题思路 首先只能选一个尺码的人直接给就是了,这样我们就只用考虑选两个尺码的人了。 因为适合穿两个尺码衣服的人的适合穿的两个尺码是相邻的,因此我们直接从小到大按照有两个尺码的人排序,再将剩下的衣服大小从
阅读全文
摘要:duel 到的。 题目链接 CF727D 解题思路 首先只能选一个尺码的人直接给就是了,这样我们就只用考虑选两个尺码的人了。 因为两个尺码的人适合的两个尺码是相邻的,因此我们直接从小到大按照有两个尺码的人排序,再将剩下的衣服大小从小到大排序,然后依次给就可以了。 这里我用了桶排,时间复杂度 \(O(
阅读全文
摘要:题目链接 CF1615C Menorah (luogu) CF1615C Menorah (codeforces) 解题思路 这题有三个重要的性质: 在同一个点做两次操作与不在这个点做操作是等价的。 给两个不同的点做操作等价于交换这两个点。 给一个字符串做偶数次操作,这个字符串的 \(0\) 的数量
阅读全文
摘要:vp 到的。 题目链接 CF1889A Qingshan Loves Strings 2 解题思路 我们考虑从头到尾依次判断情况。 维护两个指针 \(l,r\) 来依次比较,直到有 \(a_l = a_r\)。 这种情况根据题目所述是不合法的,因此我们需要依次分讨一下两种情况: \(a_l = a_
阅读全文
摘要:题目链接 CF1527B1(luogu) CF1527B2(luogu) CF1527B1(codeforces) CF1527B2(codeforces) 解题思路 这篇题解分 B1,B2 两个部分来讲。 B1 sol: 考虑字符串中 \(0\) 的数量,设这个值为 \(sum\): 若 \(su
阅读全文
摘要:题目链接 CF1108E1(luogu) CF1108E2(luogu) CF1108E1(codeforces) CF1108E2(codeforces) 解题思路 这篇题解分 E1,E2 两个部分来讲。 E1 sol: 我们发现可以暴力枚举最后经过所有操作之后的最大值,那么显然的,我们将不会做任
阅读全文
摘要:题目链接 CF827B 解题思路 假设树以 \(1\) 为根,考虑先将 \(k\) 个深度为 \(1\) 的节点,然后我们就可以将剩余的节点挂在目前的叶子节点上,但是如果一个叶子节点挂了 \(2\) 个叶子节点的话,那么这样叶子节点数目你一定不能使叶子节点减少,因此一个叶子节点最多只能往下挂一个节点
阅读全文
摘要:题目链接 CF1227D1 Optimal Subsequences (Hard Version) *1600 CF1227D2 Optimal Subsequences (Hard Version) *1800 解题思路 本篇题解分 D1,D2 两个部分来写。 D1 sol: 我们容易发现有以下两
阅读全文
摘要:题目链接 CF2066B Devyatkino (*1600) 解题思路 首先根据题目中的定义,你发现你选取一个没有 \(0\) 的序列是一定合法的,因为此时任意一个前缀 min 都是至少为 \(1\) 的,而任意一个后缀 mex 都为 \(0\),原式一定合法。 其次你发现你选取的子序列中最多只能
阅读全文
摘要:题目链接 AT_abc348_g [ABC348G] Max (Sum - Max) 解题思路 考虑对于一个 \(k\) 我们怎么做。 注意到我们可以先把 max 这一维给从小到大排序,然后依次枚举这个 \(b_i\) 并顷定 \(b_i\) 为你选取所有 \(b_i\) 中的最大值,考虑此时如何最
阅读全文
摘要:题目链接 CF121D Lucky Segments *2500 解题思路 注意到幸运数字数量很少,是 \(2^{18}\) 量级的。 下文设 \(V\) 为 \(2^{18}\)。 那么我们可以先爆搜出所有幸运数字并将这些数字排序,枚举左端点,注意到右端点是否能取值是有单调性的,于是我们可以二分右
阅读全文

浙公网安备 33010602011771号