
【算法】贪心
文章平均质量分 88
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【AtCoder】AtCoder Grand Contest 024
比赛链接点击打开链接官方题解点击打开链接Problem A. Fairness由于要求计算 A−BA-BA−B ,初始序列 (A,B,C)(A,B,C)(A,B,C) 与 (A+1,B+1,C+1)(A+1,B+1,C+1)(A+1,B+1,C+1) 的结果是相同的。令 S=A+B+CS=A+B+CS=A+B+C ,注意到两轮操作后,序列变为了 (A+S,B+S,C+S)(A+...原创 2019-09-13 16:19:45 · 328 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 032 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】 Limited Insertion【思路要点】考虑时间倒流,对于一个位置 iii ,若 ai=ia_i=iai=i ,则可以将其删去,问是否能将序列删空。不难发现每次删除最大的 iii ,使得 ai=ia_i=iai=i 是唯一的最优策略,模拟之,若无法操作则无解。时间复杂度 O(N2)O(N^2)O(...原创 2019-03-26 17:03:00 · 778 阅读 · 0 评论 -
【LOJ6413】「ICPC World Finals 2018」无线光纤
【题目链接】点击打开链接【思路要点】首先,若 M=N−1M=N-1M=N−1 ,那么直接输出原图即可。否则,必然会有一个点度数不同,考虑贪心,尽可能将度为 111 的点连向度不为 111 ,且度数最小的点,制造更多度为 111 的点。若不存在度为 111 的点,则选取度最大的点当做度为 111 的点,连向度数最小的点。使用 TwoPointersTwoPointersTwo...原创 2019-03-21 14:44:51 · 332 阅读 · 0 评论 -
【LOJ6405】「ICPC World Finals 2018」征服世界
【题目链接】点击打开链接【思路要点】建议参考 WC2019WC2019WC2019 第一课堂陈江伦的《模拟费用流问题》课件。我们称需要军队的地方为老鼠,军队为洞,那么我们可以花费一定代价移动老鼠和洞,使得所有老鼠均进洞,我们需要最小化总代价。考虑使用贪心解决该问题,我们为每一只老鼠设定一个额外代价 −∞-\infty−∞ ,其中 −∞-\infty−∞ 是一个足够小的数,表示...原创 2020-03-26 10:24:52 · 1614 阅读 · 0 评论 -
【CodeForces】CodeForces Global Round 1 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Parity【思路要点】分 bbb 的奇偶性讨论即可。时间复杂度 O(k)O(k)O(k) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;typedef long long l...原创 2019-02-14 13:55:38 · 919 阅读 · 2 评论 -
【校内训练2019-02-19】小b爱取模
【思路要点】考虑数列的差分数组,我们希望通过尽可能少的对差分数组的的前后两个位置 i,j&amp;nbsp;(i&amp;amp;lt;j)i,j\ (i&amp;amp;lt;j)i,j&amp;nbsp;(i&amp;lt;j) 分别进行 +1,−1+1,-1+1,−1 的操作使得其变成一个模意义下的全 000 数组。对于 k=2,3k=2,3k=2,3 的情况,简单设计贪心即可,具体可见代码。一个值得注意的性质是原创 2019-02-21 11:29:05 · 520 阅读 · 0 评论 -
【UOJ455】【UER #8】雪灾与外卖
【题目链接】点击打开链接【思路要点】首先判断是否无解,以下讨论默认问题有解。令 ∞\infty∞ 为一个足够大的数,对于送餐员 XiX_iXi ,在 Xi−∞X_i-\inftyXi−∞ 处增加 111 个餐馆,令所有送餐员初始时与其对应的餐馆匹配,即初始时 Ans=N∗∞Ans=N*\inftyAns=N∗∞ 。从左到右考虑每一个元素,加入当前的考虑集合。若加入元素为...原创 2019-01-28 14:36:00 · 1088 阅读 · 0 评论 -
【CodeForces】CodeForces Round #530 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Sum in the tree【思路要点】题目中给出的限制条件相当于限定了所有深度为奇数的点及其父亲的权值和,显然,将深度为偶数的非叶节点的权值设置得尽可能大有利于减少全局权值和。时间复杂度 O(N)O(N)O(N) 。【代码】#include&lt;bits/stdc++.h&gt;usi...原创 2019-01-20 11:30:34 · 651 阅读 · 0 评论 -
【校内训练2019-01-18】排列
【思路要点】最大值一定是最高的存在差异的位为 111 和 000 的两个数异或得到。把所有数字分成两个集合 S0,S1S_0,S_1S0,S1,其中 S0S_0S0 是该位为 000 的数的集合, S1S_1S1 是该位为 111 的数的集合。可以用字典树找到异或最大值最小是多少,然后依次尝试放入一个数,判断剩余序列是否存在合法解。并且,实际上我们只需要尝试三种方式即可:(1)...原创 2019-01-18 12:58:13 · 202 阅读 · 0 评论 -
【LOJ2953】「NOIP2018」旅行
【题目链接】点击打开链接【思路要点】考虑树上的情况,每次贪心地走向能够走到的最小位置即可。环套树的搜索树一定是除去一条环边后剩下的一棵树,因此可以枚举除去的环边,再次通过上述贪心找到答案,并取最优解输出。时间复杂度 O(N2)O(N^2)O(N2) 。【代码】#include<bits/stdc++.h>using namespace std;con...原创 2018-12-13 10:32:28 · 425 阅读 · 0 评论 -
【LOJ2952】「NOIP2018」赛道修建
【题目链接】点击打开链接【思路要点】首先,二分答案 ansansans ,问题转化为判断是否存在 MMM 条长度大于等于 ansansans 的边不相交的路径,考虑树形 dpdpdp 。记 dpidp_idpi 为一个二元组 (x,y)(x,y)(x,y) ,表示在点 iii 的子树中至多可以选出 xxx 条路径,并且在选出 xxx 条路径的基础上,根节点处还可以引出一条长度...原创 2018-12-13 10:27:54 · 701 阅读 · 0 评论 -
【LOJ2951】「NOIP2018」货币系统
【题目链接】点击打开链接【思路要点】首先考虑货币系统中最小的面值 xxx , xxx 一定在最小化的货币系统中出现了,并且一定没有比 xxx 更小的面值在最小化的货币系统中出现。仅包含 xxx 的当前货币系统能够表示出的面额一定是原有货币系统能表示出的一个子集,考虑在原有货币系统能表示出的面额中选取最小的、当前货币系统不能表示出的面额 yyy , yyy 一定是在原有货币系统中...原创 2018-12-13 10:10:23 · 481 阅读 · 0 评论 -
【LOJ2950】「NOIP2018」铺设道路
【题目链接】点击打开链接【思路要点】有一个显然正确的贪心:处理区间 [l,r][l,r][l,r] 时,找到区间最小值的位置 midmidmid ,对整个区间执行 amida_{mid}amid 次操作,并分治到 [l,mid−1],[mid+1,r][l,mid-1],[mid+1,r][l,mid−1],[mid+1,r] 分别处理。这个结构对应了序列的笛卡尔树,因此构建...原创 2018-12-13 09:56:42 · 487 阅读 · 0 评论 -
【省内训练2018-10-26】游走
【思路要点】考虑一个指数暴力,首先枚举每一个位置选择 “见好就收” 还是 “得寸进尺” 。记 EiE_iEi 表示从 iii 出发的期望收益。若在 iii 处选择 “见好就收” ,那么 Ei=AiE_i=A_iEi=Ai ,否则,令 iii 之前第一个选择 “见好就收” 的点为 preprepre ,之后第一个选择 “见好就收” 的点为 sufsufsuf ,有 Ei=(i−pre)...原创 2018-10-26 18:48:40 · 229 阅读 · 0 评论 -
【CodeForces】Mail.Ru Cup 2018 Round 1 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Elevator or Stairs?【思路要点】按照题意计算两种方式的用时,取较优的方案采纳。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5...原创 2018-10-21 14:28:31 · 929 阅读 · 1 评论 -
【CodeForces】Avito Code Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Antipalindrome【思路要点】当所有字符相同,答案为 000 。否则,若原串为回文串,删去其最后一个字符一定会使其变成非回文串,因此答案为 N−1N-1N−1 ,否则答案为 NNN 。时间复杂度 O(N)O(N)O(N) 。【代码】#include<bits/stdc++.h...原创 2018-10-25 19:56:20 · 423 阅读 · 0 评论 -
【CodeForces】CodeForces Round #517 (Div. 1 + Div. 2) 题解
【比赛链接】Div. 1Div. 2【题解链接】点击打开链接**【Div.2 A】**Golden Plate【思路要点】直接循环计算答案即可。时间复杂度 O(K)O(K)O(K) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;type...原创 2018-10-22 20:54:05 · 725 阅读 · 0 评论 -
【CodeChef】October Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接**【BBRICKS】**Beautiful Bricks【思路要点】上下两个砖块中,至多有一个黑色。连续的一段存在黑色的行共有两种放置的方案。枚举有几段连续的存在黑色的行,用组合数计算答案。单组数据时间复杂度 O(K)O(K)O(K) 。【代码】#include&amp;lt;bits/stdc++.h&amp;gt;using namespace ...原创 2018-10-21 10:46:08 · 535 阅读 · 0 评论 -
【LOJ3077】「2019 集训队互测 Day 4」绝目编诗
【题目链接】点击打开链接【思路要点】不难发现各个边双连通分量可以分开处理,桥边可以直接删除。可以证明,对于每一个边双连通分量,当 M−NM-NM−N 超过 O(N)O(\sqrt{N})O(N) 级别,答案一定为 YesYesYes 。那么,将剩余图中的度为 222 的点缩去,剩余的图是一张点数和边数均在 O(N)O(\sqrt{N})O(N) 级别的图。选择一个起始点...原创 2019-05-03 14:05:16 · 1102 阅读 · 0 评论 -
【BZOJ4230】倒计时
【题目链接】点击打开链接【思路要点】记 f(i)f(i)f(i) 表示 iii 最大的数位,则有 f(i)+1≥f(i+1)f(i)+1\geq f(i+1)f(i)+1≥f(i+1) ,即 f(i)≤f(i−1)+1f(i)\leq f(i-1)+1f(i)≤f(i−1)+1 。因此 iii 能够到达的数 i−1i-1i−1 必然可以到达,贪心地删去最大位是正确的。将末尾数...原创 2019-04-22 14:53:52 · 451 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 023
比赛链接点击打开链接官方题解点击打开链接Problem A. Zero-Sum Ranges即计算前缀和相同的点对数,可以用 std::map 简单实现。时间复杂度 O(NLogN)O(NLogN)O(NLogN) 。#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;typedef...原创 2019-09-11 19:23:59 · 289 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 022
比赛链接点击打开链接官方题解点击打开链接Problem A. Diverse Word从大向小枚举答案串与输入串的 LCP iii ,若能在 SSS 的长度为 iii 的前缀后加上一个大于 si+1s_{i+1}si+1 的字符形成一个合法串,就找到了答案。时间复杂度 O(∣S∣2)O(|S|^2)O(∣S∣2) 。#include<bits/stdc++.h>usi...原创 2019-09-10 16:14:38 · 365 阅读 · 0 评论 -
【CodeForces1190E】Tokitsukaze and Explosion
题目链接点击打开链接题目解法不难发现,原点距离直线越近,直线所起的作用越大,因此首先二分答案 ansansans 。以 ansansans 为半径,原点为圆心作圆,不妨假定所有直线均与圆相切。对于每一个点 aia_iai ,其对直线的要求可以描述为,在圆周上的某一区间 [li,ri][l_i,r_i][li,ri] 内必须要有至少一个切点。对于此问题在链上的形式,每次尽量向右选取...原创 2019-08-29 20:34:29 · 380 阅读 · 0 评论 -
【CodeForces875F】Royal Questions
题目链接点击打开链接题目解法由于一个王子至多匹配一个公主,因此将王子按照价值排序,贪心地考虑能否加入答案是正确的。将王子的选择看做一条边,那么由 HallHallHall 定理,存在完美匹配的充要条件是每一个联通块是树或环套树。用并查集解决即可。时间复杂度 O(N+MLogM)O(N+MLogM)O(N+MLogM) 。【代码】#include<bits/stdc++.h&g...原创 2019-08-28 13:53:34 · 271 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 037 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】 Dividing a String【思路要点】设一个划分中第一次出现长度超过 222 的 SiS_iSi 的位置为 iii 。则可以通过将 SiS_iSi 划分为更小的串,以及将 SiS_iSi 的某一个后缀拼接至 Si+1S_{i+1}Si+1 的方式使得第一次出现长度超过 222 的 SiS_iS...原创 2019-08-19 11:14:41 · 855 阅读 · 0 评论 -
【LOJ3175】「IOI2019」排列鞋子
【题目链接】点击打开链接【思路要点】令最后第 iii 只鞋子的位置到了 aia_iai ,那么交换次数即为 aia_iai 的逆序对数。因此,我们希望最小化的即为 aia_iai 的逆序对数。由于题目要求最终大小相同的鞋子相邻,因此需要对鞋子进行配对,显然将相同大小的鞋子按照出现顺序配对是最优的。考虑在最终的排列方案中相邻的两对鞋子 (a,b),(c,d)(a,b),...原创 2019-08-13 15:49:08 · 1329 阅读 · 0 评论 -
【LOJ3158】「NOI2019」序列
【题目链接】点击打开链接【思路要点】笔者本题的做法是基于对决策点进行打表得到的,并不能给出严格的证明。但确实得到了一个与标准解法,或是模拟费用流解法完全不同的做法。考虑一个 O(N3)O(N^3)O(N3) 的动态规划,将数组按照 aia_iai 排序,那么一旦确定了 LLL 对都选的位置,剩余的 K−LK-LK−L 个选择 aia_iai 的位置一定是一个前缀。因此,我...原创 2019-07-31 13:58:28 · 1059 阅读 · 0 评论 -
【省内训练2019-06-30】Gym
【思路要点】考虑 rrr 互不相同的情况。rrr 互不相同意味着如果按照天数顺序处理,只要不拖过右端点,我们就始终能够完成订单。那么可以考虑拖得尽可能久,这样就有机会一次性处理更多的订单。处理订单时优先处理右端点靠左的订单即可,需要用堆维护订单集合,并用 setsetset 维护器材集合。对于 rrr 可能相同的情况,可以将 rrr 相同的区间保留最短者,其余区间的 rrr 均减去 ...原创 2019-06-30 14:18:43 · 287 阅读 · 0 评论 -
【省内训练2019-06-30】Gene
【思路要点】本质不同的基因共有 999 种,即父本母本可以为 00,01,1100,01,1100,01,11 。分类考虑各种基因的影响,作用不同的共有 555 类000 、可以导致 x,yx,yx,y 均减少 111 ,答案增加 111111 、可以导致 x,yx,yx,y 均减少 111 ,答案增加 0.750.750.75222 、可以导致 xxx 减少 111 ,答案增加 0...原创 2019-06-30 14:06:44 · 224 阅读 · 0 评论 -
【省内训练2019-06-29】Coins
【思路要点】首先先说一下笔者在考场上的复杂度较高的做法。不难发现一次扭蛋或使用 111 枚银币,或使用 xxx 枚金币,且 xxx 不会重复。考虑枚举金币的使用方式,则可以得到一系列只使用金币就可以表示出来的数 a1,a2,…,an (ai<ai+1)a_1,a_2,\dots,a_n\ (a_i<a_{i+1})a1,a2,…,an ...原创 2019-06-29 20:59:26 · 400 阅读 · 0 评论 -
【LOJ574】「LibreOJ NOI Round #2」黄金矿工
【题目链接】点击打开链接【思路要点】可参考 官方题解 。以下为笔者个人的见解,方便起见,下称矿工为老鼠,金矿为洞。我们可以对洞的权值加上深度,老鼠的权值减去深度,从而不需要考虑树的边权。考虑新加一只老鼠带来的影响,可能的结果有如下三种:(1)(1)(1) 、与一个尚未匹配的洞一起加入当前已经匹配的集合。(2)(2)(2) 、取代当前已经匹配的集合中的一只老鼠。(3)(...原创 2019-07-07 20:35:52 · 1366 阅读 · 1 评论 -
【LOJ3052】「十二省联考 2019」春节十二响
【题目链接】点击打开链接【思路要点】显然不同的子树分组相互独立,而根节点自成一组,因此合并子树应当将大小较大的块依次合并,并且可以用归纳法证明该策略的最优性。用堆维护各个块的大小,合并时采用启发式合并即可。时间复杂度等同于长链剖分的复杂度,为 O(NLogN)O(NLogN)O(NLogN) 。【代码】#include<bits/stdc++.h>us...原创 2019-06-17 21:04:29 · 346 阅读 · 0 评论 -
【省内训练2019-06-05】硬币游戏
【思路要点】对于 a>ba>ba>b 的 (a,b,a)(a,b,a)(a,b,a) ,它等价于 (a),(b,a)(a),(b,a)(a),(b,a) ,否则,它等价于 (a),(a,b)(a),(a,b)(a),(a,b) 。因此,问题转化为了有若干堆一枚一堆和两枚一堆的硬币,且两枚一堆的硬币 (a,b)(a,b)(a,b) 满足 a≤ba\leq b...原创 2019-06-10 11:29:32 · 225 阅读 · 0 评论 -
【CodeForces】CodeForces Global Round 3 题解
【比赛链接】点击打开连接【题解链接】点击打开链接【A】 Another One Bites The Dust【思路要点】答案为 2c+2min{a,b}+[a≠b]2c+2min\{a,b\}+[a\ne b]2c+2min{a,b}+[a̸=b]。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>...原创 2019-06-03 13:48:09 · 766 阅读 · 0 评论 -
【LOJ2392】「JOISC 2017 Day 1」烟花棒
【题目链接】点击打开链接【思路要点】可以发现,让一个人 AAA 点燃另一个人 BBB 后跑开的解一定能被让 AAA 跟着 BBB 直到 AAA 燃烧殆尽的解完全替代,因此我们可以假设任意时刻,局面中一定只有一个正在燃烧的人。不在燃烧的人一定始终会向正在燃烧的人靠近,一旦到达正在燃烧的人,我们可以看做其燃烧时间增加了 ttt 。正在燃烧的人只有在遇到某人的时候才会转向。二分答案...原创 2019-06-13 15:03:02 · 1100 阅读 · 0 评论 -
【CodeForces】CodeForces Round #562 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接【A】 Increasing by Modulo【思路要点】二分答案,贪心判断。时间复杂度 O(NLogM)O(NLogM)O(NLogM) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 3e5 + 5;t...原创 2019-05-28 15:13:38 · 452 阅读 · 0 评论 -
【省内训练2019-06-01】颁奖
【思路要点】较为简单的模拟费用流问题。可以参考 WC2019WC2019WC2019 第一课堂陈江伦的《模拟费用流问题》课件。时间复杂度 O(NLogN)O(NLogN)O(NLogN) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;const long lon...原创 2019-06-05 12:51:36 · 467 阅读 · 0 评论 -
【LOJ2324】「清华集训 2017」小 Y 和二叉树
【题目链接】点击打开链接【思路要点】答案的第一位一定是编号最小的度数不为 333 的节点,不妨设为 rootrootroot ,以 rootrootroot 为根, iii 的子树内编号最小的度数不为 333 的节点为 dpidp_idpi 。在这个思路上,我们考虑如何比较 xxx 和 yyy 两点作为根节点时的答案哪个更优。111 、当 lca(x,y)≠x,ylca(x...原创 2018-09-29 14:05:12 · 569 阅读 · 0 评论 -
【CodeChef】September Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接**【ANDSQR】**AND Square Subsegments【思路要点】离线询问,按左端点排序。枚举区间的左端点 lll ,区间 [l,i][l,i][l,i] 的 andandand 和至多变化 O(LogV)O(LogV)O(LogV) 次,二分找到分界点,并找到其中是完全平方数的。每一段 andandand 和相同的区间 [l,i][l...原创 2018-10-06 16:04:18 · 362 阅读 · 0 评论 -
【BZOJ2832】宅男小C
【题目链接】点击打开链接【双倍经验链接】【BZOJ3874】【JSOI2014】宅男计划【思路要点】首先用单调栈处理一下食物集合,我们显然不会去买又贵保质期又短的食物。令\(f(x)\)表示单次购买能够吃\(x\)天的食物的花费,这个函数是凸函数。因此,如果我们枚举叫外卖的次数,那么我们希望每次叫外卖的\(x\)尽可能接近。并且,令\(g(x)\)表示叫恰好\(x\)次外卖最多能够存活的天数以及在...原创 2018-04-21 17:46:33 · 711 阅读 · 0 评论