
贪心
文章平均质量分 64
Frozen_Guardian
已退役菜鸡Acmer
展开
-
2021ICPC(沈阳) - String Problem(后缀树+贪心)
题目链接:点击查看题目大意:给出一个长度为 nnn 的字符串 sss,对于每个前缀来说,求出字典序最大的子串。题目分析:看到子串的字典序,感觉能用后缀树来做,参考了一下大佬的赛上代码: 香港中文大学(深圳)- 新手上路需要观察出本题的一个结论就是,答案一定是一个前缀的后缀,所以我们只需要求出每个答案子串的左端点即可。按照套路,对原串建立后缀树,按照字典序跑出 dfs 序 dfndfndfn,顺便维护一下每个节点首次出现的 endposendposendpos 。然后就可以用优先队列贪心了。记前缀原创 2021-11-22 18:36:57 · 1030 阅读 · 0 评论 -
CodeForces - 1607D Blue-Red Permutation(贪心)
题目链接:点击查看题目大意:给出一个长度为 nnn 的数列,每个数字有一个颜色,如果是蓝色,每次操作则可以减一;如果是红色,每次操作则可以加一。问有限次操作后,能否将数组变为一个长度为 nnn 的排列。题目分析:第一次做的时候用 multiset 乱搞过了,但感觉不算正解,看了题解后发现这不就是经典的一个贪心套路:区间和数字的最大匹配问题。先将区间按左端点排序,再将数字从小到大排序,然后用优先队列控制区间右端点是否过期就可以了。代码:// Problem: D. Blue-Red Permuta原创 2021-11-11 21:22:25 · 634 阅读 · 0 评论 -
CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)
题目链接:点击查看题目大意:给出 nnn 个点,任意两个点之间的边权为 ai⊕aja_i\oplus a_jai⊕aj,求最小生成树题目分析:去年多校写过一样的模型,再拿出来写一遍回顾一下:牛客多校5 - Graph时间复杂度 O(nlog2n)O(nlog^2n)O(nlog2n),一层 logloglog 是字典树带着的,第二层 logloglog 是需要在子树中查询异或值最小代码:// Problem: Xor-MST// Contest: Virtual Judge - CodeFo原创 2021-08-22 17:19:00 · 261 阅读 · 0 评论 -
Kattis - icpccamp ICPC Camp(二分+贪心)
题目链接:点击查看题目大意:给出两种种类的数字分别 m1m_1m1 和 m2m_2m2 个,现在要求匹配 nnn 个不同种类的数字,每个数字只能使用一次,且两数之和不能超过 sss,输出任意两对数字之差最大值的最小值题目分析:首先二分答案将最值问题转换为检验问题。假如差值确定后,每个数字就会出现一个可匹配的区间,设数字为 xxx,差值为 ddd,则其可以匹配另一种类的数字区间为 [x−d,min(x+d,s−x)][x-d,\min(x+d,s-x)][x−d,min(x+d,s−x)]于是原创 2021-08-22 15:26:09 · 467 阅读 · 0 评论 -
2021牛客多校10 - Train Wreck(贪心)
题目链接:点击查看题目大意:给出一个合法的括号序列,再给出 nnn 个数字,括号序列对应着入栈和出栈,问是否存在一个合法的顺序,使得 nnn 个数字按照括号序列操作后,每次入栈后,栈中的序列都是不同的题目分析:赛中想的贪心是,先将括号序列填空,用数字 111 开始,能放 111 的位置就放 111,放不了 111 的位置就放 222,这样贪心将 nnn 个位置填空,然后再用给出的数字尝试构造合法答案,但无奈一直 WA,可能是实现出锅了吧。参考题解的思路,将括号序列视为一棵树,每个节点都是相互独立的,我原创 2021-08-17 11:40:28 · 257 阅读 · 2 评论 -
HDU多校1 - 6955 Xor sum(字典树+贪心)
题目链接:点击查看题目大意:给出一个长度为 nnn 的序列,要求找到一段长度最短的区间,使得异或和大于等于 kkk,如果有多种答案,输出左端点最小的那个题目分析:倒着维护一下后缀异或和,将后缀异或和插入字典树,然后枚举当前点为左端点,在字典树上贪心即可。设 xxx 为当前后缀值,具体贪心方法如下:如果 kkk 的当前位为 000 ,如果走异或为 111 这条路的话,答案显然会大于 kkk,所以可以直接用 111 侧的子树更新答案,同时沿着字典树走异或为 000 的这条路,因为接下来可能还是会有大于等原创 2021-07-25 21:27:11 · 264 阅读 · 0 评论 -
CodeForces - 1481E Sorting Books(贪心+dp)
题目链接:点击查看题目大意:给出一个长度为 nnn 的序列,每次操作可以将任意一本书放到序列的末尾,问最少需要操作多少次,才能使得相同的数字挨在一起题目分析:不难看出,对每个位置的数都操作一次,是肯定能满足条件的,现在我们的目标是如何求得最优解我们需要先转换一下模型,题目要求操作最少,我们可以转换为求哪些位置是不需要移动的。这样将剩下的位置按照一定次序进行操作,一定是可以达到目标的对于某个数字 xxx 而言,设 l[x]l[x]l[x] 和 r[x]r[x]r[x] 分别为 xxx 在原序列中第一次原创 2021-07-14 15:26:00 · 228 阅读 · 0 评论 -
CodeForces - 1480D1 Painting the Array I(贪心)
题目链接:点击查看题目大意:给出一个长度为 nnn 的序列,现在要求拆分成两个子序列,使得两个子序列的贡献之和最大。对于一个序列的贡献就是,去掉相邻且相同的字母后的长度,即 ∑i=1n[a[i]!=a[i−1]]\sum_{i=1}^{n}[a[i]!=a[i-1]]∑i=1n[a[i]!=a[i−1]],其中 a[0]=0a[0]=0a[0]=0。题目分析:首先预处理出对于每个位置 iii 后首次出现 aia_iai 的位置,即为 last[i]last[i]last[i],然后按照三个规则贪心即原创 2021-07-14 00:26:24 · 178 阅读 · 0 评论 -
CodeForces - 1208F Bits And Pieces(SOSdp+贪心)
题目链接:点击查看题目大意:给出一个长度为 nnn 的序列,求出贡献最大的三元对:(i,j,k)(i,j,k)(i,j,k),满足 i<j<ki<j<ki<j<k,其贡献为 ai∣(aj&ak)a_i|(a_j\&a_k)ai∣(aj&ak)题目分析:因为 aja_jaj 和 aka_kak 被绑定了,所以我们可以直接枚举 aia_iai 贪心从高位去寻找是否存在后面 aj&aka_j\&a_kaj&ak原创 2021-06-08 15:40:15 · 257 阅读 · 0 评论 -
CodeForces - 1491C Pekora and Trampoline(差分+贪心)
题目链接:点击查看题目大意:给出一个长度为 nnn 的序列 aaa,aia_iai 表示第 iii 个蹦床的强度,当从第 iii 个蹦床起跳的话可以跳到 i+aii+a_ii+ai 的位置,但是相应的第 iii 个蹦床的强度会减少一,更具体的来说,假如在蹦床 iii 起跳后,会有 ai=max(ai−1,1)a_i=max(a_i-1,1)ai=max(ai−1,1)。问最小需要多少次弹跳,才能使得所有的蹦床强度都等于 111题目分析:口胡了一个 n2n^2n2 的算法,交了一发之后发现会被卡成原创 2021-06-04 11:48:45 · 574 阅读 · 0 评论 -
CodeForces - 1494D Dogeforces(贪心+构造)
题目链接:点击查看题目大意:给出 nnn 个叶子结点和一个 n∗nn*nn∗n 的 LCALCALCA 矩阵,其中 LCALCALCA 表示的是最近公共祖先节点的权值,现在需要构造出一棵自顶向下权值严格递减的树题目分析:参考至:https://blog.youkuaiyun.com/liufengwei1/article/details/114298063思路就是贪心去合并,类似于哈夫曼树那样,将所有的 LCALCALCA 从小到大排序,然后贪心去加一开始以为所有点权都不一样,后来意识到是每一条链上的点权互不原创 2021-05-28 18:20:17 · 196 阅读 · 0 评论 -
CodeForces - 1529E Trees of Tranquillity(贪心+线段树)
题目链接:https://vjudge.net/problem/CodeForces-1529E题目大意:给出两棵根节点为 111 的树,分别称为 AAA 树和 BBB 树,现在通过两棵树可以构造出一个无向图,当且仅当点对 (x,y)(x,y)(x,y) 同时满足以下两个条件时,可以在图中建边:在 AAA 树中,xxx 是 yyy 的祖先或 yyy 是 xxx 的祖先在 BBB 树中,xxx 不能是 yyy 的祖先同时 yyy 不能是 xxx 的祖先求该图的最大团题目分析:一开始读错题了,后来原创 2021-05-25 18:36:25 · 599 阅读 · 4 评论 -
CodeForces - 1506G Maximize the Remaining String(单调栈+贪心)
题目链接:点击查看题目大意:给出一个长度为 nnn 的字符串,假设共出现了 kkk 种字母,现在要求出一个长度为 kkk 的子序列,满足每种字母只出现一次,且字典序最大题目分析:和之前牛客上的一道题目模型一样,都是借助单调栈实现的贪心,考虑用单调栈维护答案序列,现在新加入了一个字母 chchch,分情况讨论:chchch 在答案序列中已经出现过,跳过即可chchch 比栈顶元素的字典序要大,且栈顶元素在后面还有出现:则用 chchch 将栈顶元素挤下去一定是最优的模拟整个过程,最后将栈中的答案原创 2021-05-23 16:17:27 · 208 阅读 · 0 评论 -
CodeForces - 1521D Nastia Plays with a Tree(树上最小路径覆盖)
题目链接:点击查看题目大意:给出一棵树,可以删除 xxx 条边并增加 xxx 条边使得树变为竹子,竹子就是一条链,问 xxx 最小可以为多少,输出一种方案数题目分析:树上最小路径覆盖,按照子节点个数分两种情况讨论即可:son[u]==2son[u]==2son[u]==2:删除掉 uuu 和 fa[u]fa[u]fa[u] 这条边即可son[u]>2son[u]>2son[u]>2:删除掉 uuu 和 fa[u]fa[u]fa[u] ,并且删除掉 son[u]−2son[u]-2原创 2021-05-09 20:30:02 · 523 阅读 · 0 评论 -
牛客 - 共鸣问题(贪心+思维)
题目链接:点击查看题目大意:给出 nnn 个点,每个点都有点权,再给出 mmm 个关系,以 (x,y,z)(x,y,z)(x,y,z) 的形式给出,规定如下:同时选择点 xxx 和点 yyy 将获得 zzz 的代价选择点 xxx 或点 yyy 将不获得代价同时不选择点 xxx 和点 yyy 将获得 −z-z−z 的代价问如何选择可以使得总代价最大题目分析:假设把上述情况三去掉就是一个最大权闭合子图的裸题了,导致想了半个小时的网络流解法,虽然明知道是错误的但却并没有什么新思路赛后看了题解发现原创 2020-12-23 21:20:23 · 1221 阅读 · 10 评论 -
CodeForces - 1465E Poman Numbers(推公式+贪心)
题目链接:点击查看题目大意:给出一个长度为 nnn 的字符串,每个字符串实质上代表一个数字,例如:a=20,b=21,⋯,z=225a=2^0,b=2^1,\cdots,z=2^{25}a=20,b=21,⋯,z=225,现在需要寻找一种递归顺序,使得每个位置非负即正,递归规则如下:f(S)=−f(S[1,m])+f(S[m+1,∣S∣])f(S) = -f(S[1, m]) + f(S[m + 1, |S|])f(S)=−f(S[1,m])+f(S[m+1,∣S∣])其中 mmm 是 [l,r]原创 2020-12-22 22:36:31 · 349 阅读 · 0 评论 -
CodeForces - 1076D Edge Deletion(最短路+贪心/最短路树+bfs)
题目链接:点击查看题目大意:给出一张 n 个点 m 条边的带权无向图,设 d[i]d[ i ]d[i] 为从点 1 到点 i 的最短路,现在要求保留最多 k 条边,使得新图中 d′[i]=d[i]d'[ i ] = d[ i ]d′[i]=d[i] 的点尽量多题目分析:仍然是两种思路,比较简单的一种思路就是先用迪杰斯特拉求出最短路树,此时树上有 n - 1 条边,每选择一条边,就会使得满足d′[i]=d[i]d'[ i ] = d[ i ]d′[i]=d[i]的点加一,所以直接在最短路树上 dfs 或原创 2020-12-19 15:41:44 · 263 阅读 · 1 评论 -
CodeForces - 551C GukiZ hates Boxes(二分+贪心)
题目链接:点击查看题目大意:给出一个长度为 n 的数列 a,表示每个位置的障碍物数量,现在有 m 个学生可以来搬走障碍物,每一秒钟可以做出的行为如下:从位置 i 移动到位置 i + 1 从当前位置搬走一个障碍物问搬走所有的障碍物最少需要多长时间题目分析:不难看出时间越多,越有可能完成任务,所以可以二分时间然后贪心去check最初的思想是让学生从前向后去搬,发现不好处理,看了题解后发现可以让学生从后向前去搬具体思想如下,因为搬走所有的箱子所需要的时间是固定的,唯一不同的就是花费在路上的原创 2020-12-14 10:44:58 · 222 阅读 · 0 评论 -
CodeForces - 967D Resource Distribution(贪心+二分+构造)
题目链接:点击查看题目大意:给出 n 个机器,每个机器可以处理 a[ i ] 的工作,现在有两个工作需要处理,工作量分别为 x1 和 x2,可以将一个工作分配给 k 个机器同时完成,需要满足:k 个机器都需要满足 每个机器只能处理一个工作题目要求输出一种合适的构造方案,如果无解输出 No题目分析:首先预处理出 a[ i ] 和 b[ i ] ,分别代表将 x1 和 x2 分配给 i 个机器所需要的最低下限然后设题目中的 a[ i ] 为 c[ i ] (避免与上面的两个变量重名),代表原创 2020-12-13 21:55:17 · 260 阅读 · 0 评论 -
CodeForces - 1395D Boboniu Chats with Du(贪心)
题目链接:点击查看题目大意:给出一个长度为 n 的数列 a,现在可以对数列 a 进行重新排序,规定:如果 a[ i] > m 的话,那么接下来 d 天的数字不做贡献 否则没有影响问如何排列可以使得贡献和最大题目分析:想到了是贪心,但一开始的思路是对整个数列排序,然后每次用最大的大于 m 的值去抵消最小的 d 个数,如此往复,不过需要考虑好多细节,而且贪心策略也无法证明是最优的,然后也没实现出来看了题解后才恍然大悟,其实可以将大于 m 的数和小于 m 的数分别储存起来贪心排序储存一.原创 2020-12-09 21:47:20 · 192 阅读 · 0 评论 -
Gym - 101471D Money for Nothing(决策单调性+分治+贪心)
题目链接:点击查看题目大意:在二维平面中给出 n 个点可以作为矩形左下角的点,再给出 m 个点可以作为矩形右上角的点,现在问最大可以构造出多大面积的矩形,即如何选择,可以使得 ( b[ j ] . x- a[ i ] . x ) * ( b[ j ] . y - a[ i ] . y ) 最大题目分析:首先贪心去想,对于矩形左下角的点来说,如果存在着两个点 A( x1 , y1 ),B( x2 , y2 ),满足 x1 < y1 且 x2 < y2 的话,那么点 A 一定是要比点 B .原创 2020-12-07 14:19:57 · 1727 阅读 · 0 评论 -
CodeForces - 1453E Dog Snacks(树形dp+贪心)
题目链接:点击查看题目大意:给出一棵有根树,现在需要选择一个最小的 k 值,可以满足下列的 n 次操作:起始时位于点 1(根节点) 每一步选择一个未被遍历的节点中,距离最近的,且必须满足此距离小于等于 k 跳到上述选择的点上去,然后重复操作 2,直到所有的点都被遍历过 回到点 1,需要满足这段距离也小于等于 k问最小的 k 是多少题目分析:一开始以为是二分+check,但是感觉check很难写,于是思考树形dp类比于ccpc秦皇岛的那个树形dp,贪心去思考一下,对于一个普通的节点 u原创 2020-12-05 22:21:53 · 359 阅读 · 0 评论 -
CodeForces - 946E Largest Beautiful Number(贪心+模拟)
题目链接:点击查看题目大意:给出一个数位长度为偶数的数字 n,需要求出一个比 n 小的,且所有数位重新排列后可以形成回文串,要求这个数字尽可能大题目分析:从最低位开始贪心,依次枚举每一位的数字,然后贪心去给低位重新分配以及补充即可,因为题目保证了数位的长度为偶数,所以此题中回文串的条件只是单纯约束了所有数位出现次数为偶数即可,不可能为奇数代码://#pragma GCC optimize(2)//#pragma GCC optimize("Ofast","inline","-ffas.原创 2020-12-04 17:19:33 · 148 阅读 · 0 评论 -
CodeForces - 1457E New Game Plus!(贪心)
题目链接:点击查看题目大意:给出一个长度为 n 的序列,需要自己定义一种顺序去遍历序列,每次需要维护答案:ans += sum sum += a[ i ]有 k 次机会可以将 sum 清零,问如何遍历可以使得最后的 ans 最大题目分析:首先不难看出,k 次清零操作可以将整个序列拆分成相互独立的 k + 1 个子段,而对于每个子段来说,假设其长度为 len,从头到尾遍历之后得到的贡献将是:b[ 1 ] * ( len - 1 ) + b[ 2 ] * ( len - 2 ) + ... +原创 2020-11-30 15:07:18 · 486 阅读 · 0 评论 -
CodeForces - 351E Jeff and Permutation(贪心)
题目链接:点击查看题目大意:给出一个长度为 n 的序列,可以选择某些位置使得 a[ i ] = - a[ i ],问逆序对最少可以是多少题目分析:需要看出的一个关系就是,在某一对关系 ( i, j) 中,a[ i] 和 a[ j ] 绝对值较大的数字会起到决定性的作用,分类枚举一下就是:假设 i < j 且 abs( a[ i ] ) > abs( a[ j ] )a[ i ] >a[ j ],贡献为 1 a[ i ] > -a[ j ],贡献为 1 -a[...原创 2020-11-30 10:47:19 · 301 阅读 · 4 评论 -
CodeForces - 507E Breaking Good(二分+贪心)
题目链接:点击查看题目大意:给出 n 个竹子,初始时高度为 h[ i ],接下来每一天每个竹子都会长高 a[ i ] 个单位的高度,每一天可以砍 k 次竹子(可以是同一个),每次可以砍掉 p 个单位的高度,现在问 m 天后,n 个竹子高度的最大高度的最小值是多少题目分析:看到询问的答案是 “最大值的最小值” 不难想到二分,于是问题转换为了,给出高度 mid,如何判断 mid 是否合法正着去思考的话,很难想出一种合法的贪心策略,不难看出的一个小结论是:时间靠后的 “砍” 操作一定比时间靠前的更有价原创 2020-11-16 16:09:44 · 209 阅读 · 0 评论 -
2020ICPC(小米邀请赛2) - Knapsack(贪心+dp)
题目链接:点击查看题目大意:给出 n 个物品,每个物品都有体积和价值,现在问容量为 m 的背包最多可以装下多少价值的物品题目分析:本题正解应该是斜率优化dp,然鹅看了大佬们的博客讲解后,感觉不是自己可以触碰的领域,所以用了一种 “投机取巧” 的方法实现本题直接进行 01 背包时间复杂度是 n * m 级别的,但是每个物品最大的容量是 100,所以考虑大范围贪心小范围 dp,贪心决策就是按照每个物品单位体积的价值降序排序,然后贪心取即可,小范围进行背包选择最优价值,阈值我设置的是 200,只要在规原创 2020-11-04 11:40:47 · 341 阅读 · 0 评论 -
2020ICPC(小米邀请赛2) - 2020(二分+贪心)
题目链接:点击查看题目大意:给出一个长度为 n 的字符串,问最多可以匹配多少个互不相交的 “2020”的子序列题目分析:考虑 “2020” 是由两个 “20” 组成的,假设对于一个 “20” 来说,用 ( l , r ) 来表示其在字符串中覆盖的起止位置,那么用来组成 “2020” 的两个 “20”:( l1 , r1 ) , ( l2 , r2 ),必须满足 r1 < l2 或 r2 < l1 才行,也就是互不相交假设现在有 k 个 “2020”,也就是需要选择 2 * k 个 .原创 2020-11-03 17:55:59 · 407 阅读 · 0 评论 -
2020CCPC(秦皇岛) - Kingdom‘s Power(树形dp+贪心)
题目大意:给出一棵 n 个节点的有根树,点 1 为根节点,现在在根节点有无穷多个士兵,每一秒可以控制任意一个士兵向任意一个单位移动一步,士兵移动到的点会被永久占领,现在问最少需要经过多少秒,才能将所有的点都占领题目分析:树形dp...原创 2020-10-21 10:16:25 · 2657 阅读 · 5 评论 -
牛客 - Sixth Sense(贪心+二分)
题目链接:点击查看题目大意:给出两个长度为 n 的数列记为 a 和 b,现在 a 的数列固定不动,问如何对数列 b 进行排列,可以使得:b[ i ] > a[ i ] (严格大于)的位置尽可能多 在满足上述要求的前提下,b 的排列字典序最大题目分析:如果不考虑第二个约束的话,那就是一个非常简单的贪心问题了,贪心策略如下:因为最终需要的是 a 中的每个元素和 b 中每个元素一一对应的一个结果,所以只需要考虑其相对位置,将两个数组分别排序,然后用双指针一个去枚举 a 中的元素,另一个贪心从 b原创 2020-10-06 21:15:14 · 463 阅读 · 0 评论 -
中石油训练赛 - Incremental Induction(贪心)
题目链接:点击查看题目大意:初始时有 n 个人,给出一个 n * n 的能力矩阵,如果 maze[ i ][ j ] = 1 的话说明 i 和 j 对战的话,i 能获胜,反之亦然,现在 n 个人都在左边,需要确定一个顺序,让 n 个人依次到达右边,每过去一个人后,都需要统计此时对于右边每个人 i 来说,左边有多少个人能战胜他,记为 lose[ i ] ,需要确定一个合适的顺序,使得 的最大值最小题目分析:又是题意比较难懂的一道题,读懂题目后,不难看出这是一个有向完全图,这个题目的顺序其实是关键,..原创 2020-09-14 10:33:35 · 1058 阅读 · 6 评论 -
CodeForces - 1267A Apprentice Learning Trajectory(贪心)
题目链接:点击查看题目大意:在数轴上有 n 个房子,每个房子开放的时间为 [ l[ i ], r[ i ] ] ,在这个房子里铸一把剑需要t[ i ] 个连续的时间单位,同一个时间只能在一间房子里铸剑,问最多能铸多少剑题目分析:对于一个时间戳 t 而言,只有两种情况,我们可以讨论一下:如果 t 时刻没有房子开放,那么我们选择接下来首先可以铸完剑的房子显然是最优的,注意是首个可以铸完剑的房子,而不是首个可以铸剑的房子,换句话说也就是 l[ i ] + t[ i ] 最小的区间肯定是最优的,而不..原创 2020-09-03 12:09:01 · 563 阅读 · 0 评论 -
CodeForces - 1252E Songwriter(贪心)
题目链接:点击查看题目大意:给出一个长度为 n 的序列 a ,现在需要构造出一个长度为 n 的序列 b ,满足相邻的 i 和 i + 1 下,a[ i ] 和 a[ i + 1 ] 的大小关系应该和 b[ i] 和 b[ i + 1 ] 的大小关系相同题目分析:...原创 2020-09-02 23:07:01 · 358 阅读 · 2 评论 -
HDU多校7 - 6850 Game(博弈+思维+贪心)
题目链接:点击查看题目大意:二维平面上有 n 个点,现在两个人博弈,每个点至多遍历一次,先手从第一个点出发,随意选择一个点作为下一个点,后手再选择一个点,从现在开始需要满足的条件是,接下来选择点的距离必须要大于前一次两点的距离,无法做出选择的人失败题目分析:挺好的一道博弈题,网上很多博客的证明和思路都是错的,只不过因为数据都是整数的原因,那样实现确实可以 AC,这里直接讲一下官方题解的思路首先求出 n * ( n - 1 ) / 2 条边作为两两点对的距离,贪心排序一下,按照距离从大到小分类讨论原创 2020-08-12 23:20:09 · 393 阅读 · 0 评论 -
HDU多校2 - 6763 Total Eclipse(贪心+并查集)
题目链接:点击查看题目大意:给出一张 n 个点和 m 条边组成的无向图,现在每个点都有一个点权,对于每次操作,可以选择一个点以及其周围能够连接的所有点,令其点权减一,当某个点的点权减到 0 时,就相当于将该点以及相应的连边从图中删除,问删除掉 n 个点最少需要进行多少次操作题目分析:比赛时题意出锅了,自闭了一下午回到这个题目,贪心去想每次选择点权最小的点然后将与其相连的连通块内的所有点点权减一一定是最优的(靠感觉猜的),但是如果暴力去实现的话,时间复杂度将是 n * n 的,考虑正难则反,正着删原创 2020-07-25 02:35:54 · 360 阅读 · 0 评论 -
牛客多校4 - Harder Gcd Problem(构造+贪心)
题目链接:点击查看题目大意:给出一个 n ,表示 1 ~ n 的 n 个数字,现在要求选出尽可能多的两两匹配,使得每组匹配的 gcd 都大于 1,输出最多能有多少组匹配,以及方案题目分析:代码:#include<iostream>#include<cstdio>#include<string>#include<ctime>#include<cmath>#include<cstring>#include&.原创 2020-07-21 17:47:29 · 332 阅读 · 0 评论 -
HDU - 6746 Civilization(贪心+模拟)
题目链接:点击查看题目大意:中文题面题目分析:一道比赛时写崩了的模拟,赛后参考别人的代码,发现原来这个题目可以写的如此简单说会题目,n 只有 500 ,可以 n * n 枚举每个位置作为起点,对于每个位置而言,可以 6 * 6去枚举周围曼哈顿距离为 3 的点,将其都压入一个 vector 中然后排序,显然在城市分配完毕后,选择权值较大的点作为接下来的工作地点是最优的,接下来模拟每个回合的过程就好了,注意,不需要枚举回合,因为大量相邻的回合所提供的贡献都是相同的,可以将其划分一下,就能快速计算了.原创 2020-07-20 02:12:35 · 274 阅读 · 0 评论 -
牛客多校 - Minimum-cost Flow(最小费用最大流+贪心)
题目链接:点击查看题目大意:给出一张有向图,每条边都有单独的花费,现在给出 q 次询问,每次询问给出一个 u 和 v 需要回答:将所有边的流量都设置为 u / v 后,从点 1 到点 n 流量为 1 时的最小花费为多少题目分析:因为询问非常多,肯定不能对于每次询问重新建边,但因为总的边数非常小,所以我们利用等比例的特性,初始时先将每条边的流量都设置为 1 ,在求最小费用最大流的时候,记录一下每个流量下的最小花费,这样对于每次询问,就可以贪心求解了因为初始时每条边的流量为 1 ,每次询问时每条边的原创 2020-07-12 18:14:33 · 896 阅读 · 0 评论 -
HDU - 5920 Ugly Problem(Java大数+贪心)
题目链接:点击查看题目大意:给出一个非常大的数字 n (),现在要求将其拆分为数量不超过50 个的回文串之和题目分析:贪心去分就好了,贪心策略如下,奇偶两种情况:对于奇串 12345:选择前半段 123 将其减一,变为 122 构造回文串 12221 用原数字减去当前回文串然后继续操作对于偶串 123456:选择前半段 123 将其减一,变为 122 构造回文串 122221 用原数字减去当前回文串然后继续操作这样就好了,因为每次选择了前半段,所以每次数字的长度都会减少一半.原创 2020-06-28 00:04:17 · 325 阅读 · 0 评论 -
CodeForces - 1373F Network Coverage(二分)
题目链接:点击查看题目大意:给出一个首尾相接的环,每个点的编号分别为 1 ~ n ,其中每个点的需求量记为 a[ i ] ,供应量记为 b[ i ] ,每个点可以用 b[ i ] 向 a[ i ] 和 a[ i + 1 ] 提供需求,现在问是否存在着一种分配方案,使得每个点的需求 a[ i ] 都能得到满足题目分析:题解的 O( n ) 解法表示没看懂,还是说一下从网上看到的二分解法吧假设任意一个点 b[ i ] 向 a[ i ] 或者 a[ i + 1 ] 的供应量确定了的话,那么剩下的 n原创 2020-06-27 23:17:16 · 479 阅读 · 0 评论