
贪心
文章平均质量分 64
f_zyj
一个追逐蝴蝶的人!
展开
-
HDU-2017 多校训练赛1-1002-Balala Power!
ACM模版描述题解这个题,是我的一个痛点……真心不难,可是我无限 CE 啊……思路上,很简单,判断每个字母的贡献,根据贡献排行进行分配,注意前缀不能为 00 的情况。这就是中心思想,很简单……可是一开始我就无限 CECE,先是本机测试编译错误,后来发现是爆内存了,找了好久注意到,在排序的对比函数 cmp()cmp() 中,参数没有加引用,这一大杀招,我竟然忘了,导致内存爆掉了,然后我加上后,本地没有原创 2017-07-25 17:10:10 · 1314 阅读 · 11 评论 -
51Nod-1563-坐标轴上的最大团
ACM模版描述题解这个题根据题意,我们知道,根据 xx 和 ww 可以确定某一个点的不可连边的区间,而两个点的区间只要不重叠,就可以连边,那么最大团就是尽可能多的选取互相不重叠的区间,也就变成了类似于 0101 背包的问题,可是这个题好像数据比较弱还是怎么回事,直接排序后贪心就能过……所以,水过了!!!代码#include <cstdio>#include <iostream>#include原创 2017-07-25 20:49:57 · 445 阅读 · 0 评论 -
HDU-2017 多校训练赛8-1008-Hybrid Crystals
ACM模版描述 题解题目太长了,给的那个公式也看的不明不白的,,,这个题如果不是我没有理解蒙过去了,就是数据太水我们水过去了……一开始就想到了水一发试试,但是感觉不太可行就没有实行,待到最后实在是没有什么好的计策,就决定不试白不试,然后竟然 AA 了。代码#include <iostream>using namespace std;const int MAXN = 1111;int n, k;i原创 2017-08-17 16:59:42 · 493 阅读 · 0 评论 -
HDU-2017 多校训练赛6-1008-Kirinriki
ACM模版描述题解这个题要难为死我了,搞半天也不知道怎么做……首先我们可以假设 AA 一定在 BB 左边,然后我们可以考虑 AA 的尾部和 BB 的起点,如果暂时不考虑长度不固定,我们每次查找都让长度尽可能长,那么,我们一定需要将 AA 的尾部或者 BB 的起点靠近,然后获取 AA 向左延伸,BB 向右延伸对应位置的贡献,然后呢?我们可以采用尺取法来进行 AA 的尾部和 BB 的起点向两侧的推移,当原创 2017-08-10 17:20:11 · 629 阅读 · 7 评论 -
51Nod-1480-打广告
ACM模版描述题解贪心,没什么难的,就是尽可能的匹配到覆盖率高的区间。先对广告进行排序,按照左端点从小到大,右端点从大到小的主次关系来排序,这时,排好的序列中右端点的图像是锯齿形的,我们只取一个单调递增的子序列进行匹配,因为这样我们就能匹配到最大的区间。然后呢,我们根据每一个频道的需求,查找小于 ajaj 的第一个区间位置(二分),然后遍历其后紧挨着的合法的区间,求最值即可。这个题不难,就是题目读起原创 2017-08-04 16:16:41 · 359 阅读 · 0 评论 -
HDU-2017 多校训练赛2-1003-Maximum Sequence
ACM模版描述题解这个题实际上就是一个尺取法,贪心控制左区间端点,右区间端点每次加一,右区间移动需要添加数据,左区间端点移动需要删除数据,就这样,我采用了多重集合搞,但是一开始一直 CECE,后来发现我这里提交代码十次九次都要 CECE,大概是丢包了吧,然后终于提交上了却 WAWA 了,找了好久发现,原来是因为我删除操作,不能直接删除某一个数 xx,因为这样会将所有的 xx 都删除,这显然是不行,我原创 2017-07-28 16:11:43 · 566 阅读 · 3 评论 -
HDU-2017"百度之星"程序设计大赛-初赛(B)-1006-小小粉丝度度熊
ACM模版描述题解签到题,应该算是贪心吧……看看代码吧,说起来比较麻烦。代码#include <cstdio>#include <algorithm>#include <iostream>using namespace std;typedef long long ll;const int MAXN = 1e5 + 5;int n, m;ll C[MAXN];struct node{原创 2017-08-13 16:37:24 · 1147 阅读 · 0 评论 -
HDU-2017中国大学生程序设计竞赛-网络选拔赛-1001-Vertex Cover
ACM模版描述题解构造题,思路不好想,题解还是十分容易理解的,也算是一种贪心的构造了。代码#include <iostream>#include <cstring>using namespace std;const int MAXN = 1e4 + 5;pair<int, int> pii[MAXN];int a = 99, b = 111, c = 0;void solve(){ fo原创 2017-08-20 16:58:17 · 1147 阅读 · 0 评论 -
51Nod-1530-稳定方块
ACM模版描述题解很巧妙的利用两个堆来搞事情,一个大顶堆,一个小顶堆,就是优先队列,维护每次能够拆除的方块儿,每拆除一个向周围扩展一次,并且删除拆掉的这个方块儿,这里用 mapmap 处理。说白了,就是一个有趣的贪心问题,用到两种数据结构罢了,STLSTL ……代码#include <iostream>#include <cstdio>#include <queue>#include <map原创 2017-07-28 19:54:04 · 495 阅读 · 0 评论 -
51Nod-1493-数据关联
ACM模版描述题解贪心问题,不过贪心思路不是特别明了……首先我们将两个序列都进行排序,然后分别考虑往 aa 序列还是 bb 序列凑(复制),当然,复制的时候并不是说将某一个序列里的所有元素都复制到另一个序列的所有块儿,而是将某一个序列的所有元素都复制到另一个序列的部分块儿,而后者序列的其他块儿也要复制过来,所以呢,我们需要判断怎么贪心选取块儿比较划算,这个部分看代码就能懂,说起来都是麻烦一些,就是从原创 2017-07-23 17:04:52 · 371 阅读 · 0 评论 -
51Nod-1619-完全二叉树的方差
ACM模版描述题解这个题的官方题解是我见过最详细的官方题解了……简单的说,这个题就是贪心 + 枚举。官方题解:代码#include <cstdio>#include <algorithm>#define ll long longusing namespace std;const int MAXN = 1001;const ll INF = 0x3f3f3f3f3f3f3f3f;int n;ll原创 2017-07-31 19:15:26 · 480 阅读 · 0 评论 -
51Nod-1429-巧克力
ACM模版描述题解这里我们先来分析两种操作,操作一,是每次消除一个因子 22,操作二,是每次消除一个因子 33,再引入一个因子 22,那么实际上,当两个巧克力经过若干次消除因子 22 和 33 后,导致剩余的因子完全相同。那么我们就可以通过这个来求最后的结果,首先我们经过若干次分解,获取每个巧克力的因子,这里我们可以直接四条边分别处理最后长宽加在一起弄,也可以先求巧克力面积,当然,何乐而不为呢?先求原创 2017-06-25 00:18:17 · 432 阅读 · 0 评论 -
51Nod-1288-汽油补给
ACM模版描述题解和蓝桥杯上一道题目相似度达 99%99\%,贪心搞搞即可~~~这个题放在六级着实有些夸张了,蓝桥杯才把他放在算法训练中,连算法提高都不算……所以,这个题本身也就二三级题的难度吧!代码#include <iostream>using namespace std;typedef long long ll;const int MAXN = 1e5 + 10;const ll INF =原创 2017-06-14 00:16:59 · 783 阅读 · 0 评论 -
51Nod-1454-升排列
ACM模版描述题解这个题好有趣的说,不看评论区的真不知道竟然和斐波那契数列挂上钩了……首先我们可以分析合法的序列的情况,想要变换后序列不变,那么肯定只有两种情况,要么就是 ii 位置映射到 ii 位置,或者就是相邻的两个 i 和 i+1i\ 和\ i + 1 互相映射,也就是说 ii 映射到 i+1i + 1,i+1i + 1 映射到 ii。那么我们已经知道构造序列的成分如何了,但是我们怎么样才能构原创 2017-06-26 17:45:41 · 380 阅读 · 3 评论 -
51Nod-1510-最小化序列
ACM模版描述题解这个题,打眼一看就是贪心,然后我就贪心写了一下,WAWA 了三分之一,分析了一下,感觉只是贪心不行,还有 dpdp 搞搞才行……首先,贪心的思路是,我们需要将数据分为 kk 组,其中有 n % kn\ \%\ k 组的大小为 nk+1\frac{n}{k} + 1,剩下的 k−n % kk - n\ \%\ k 组有 nk\frac{n}{k} 个。这个好理解,就不多说了,接着我们原创 2017-07-15 02:55:45 · 588 阅读 · 0 评论 -
HDU-5884-Sort
ACM模版描述题解这个题十分有趣,二分 + 贪心。二分 kk,然后贪心判定是否可以通过。这里判断的过程可以用优先队列优化,每次出 kk 个小的,然后合并起来,变为一个大的存入,但是这样会超时,也许用输入输出外挂可以卡过,但是这里有更好的办法,就是用两个队列,先排序将序列进队列 qi1qi1,然后每次从 qi1、qi2qi1、qi2 中取前 kk 个最小值,合并后直接入 qi2qi2,这里很容易证明每原创 2017-06-28 01:40:10 · 543 阅读 · 0 评论 -
51Nod-1673-树有几多愁
ACM模版描述题解真的感觉这个题好难,看了官方题解也不知道怎么搞,又找了一下代码,稍微懂了一些……总得来说,这个题就是 dpdp(树归、状压) + 贪心,贴一下官方题解吧……我也说不好。真废……代码#include <cstdio>#include <vector>#include <algorithm>#include <cmath>#include <cstring>using name原创 2017-07-20 20:49:57 · 481 阅读 · 0 评论 -
51Nod-1540-俄罗斯赌轮盘
ACM模版描述题解这个题,放在五级题有些过了,撑死了三级题难道,如果放在三级题,我想过的人会更多,放在五级题让人高估了它!!!其实就是一个贪心,我们想要挂的几率最低,实际上就是尽量隔一个放一个,所以也就是说,点都尽量放在前边,而 XX 尽量往后隔一个放一个,如果说,我们放不下怎么办?当然还是优先往后放,从后往前依次取缔点。所以最后的情况一般有如下几种(我用 YY 取代点,容易对齐): YYYYYX原创 2017-07-30 02:05:43 · 744 阅读 · 0 评论 -
51Nod-1519-拆方块
ACM模版描述题解十分有趣的题,我们从左往右遍历一遍,每个 a[i]a[i] 要么是比 a[i−1]a[i - 1] 多一次操作,要么是 h[i]h[i] 次,取小的;接着从右往左同理搞一遍,获取了 b[]b[],初始化 a[0]=b[n−1]=1a[0] = b[n - 1] = 1。最后呢,从这 a[i]、b[i]a[i]、b[i] 中取小,再在这 nn 个数中取最大即可。很好玩,仔细观察不难发原创 2017-07-08 23:42:47 · 408 阅读 · 0 评论 -
51Nod-1689-逛街
ACM模版描述题解十分巧妙的一道题,三个优先队列可解。每次我们枚举终点 endend,这样我们就确定了路上的花费 a[end]a[end],剩下的就是处理进店的花费 b[i]b[i]。这里我们需要注意的是,c[i]∈{0,1}c[i] \in \{0, 1\},所以呢,题目中要求的 kk,也就是必须逛不少于 kk 个 c[i]=1c[i] = 1 的店。首先我们定义三个优先队列 Q1、Q2、Q3Q1原创 2017-07-09 18:18:26 · 595 阅读 · 4 评论 -
HDU-2017 多校训练赛9-1008-Numbers
ACM模版描述题解数据结构用 mapmap,在此基础上进行贪心策略就好了。不难,和前几天的多校的有一道题好像挺相似的。代码#include <iostream>#include <map>using namespace std;map<int, int> mii;const int MAXN = 1111;int m;int a[MAXN];int main(int argc, const ch原创 2017-08-22 21:06:57 · 467 阅读 · 0 评论 -
51Nod-1053-最大M子段和 V2
ACM模版描述题解这个题需要用到贪心搞。首先涉及到一点优化是,连续的正数或者连续的负数,到最后肯定是可以合并在一起的,所以我们首先将序列中的相邻正数或者相邻负数全部合并,将序列压缩,也许这个也谈不上什么优化,因为这个步骤对于整个贪心过程是必须的,在这个过程中,累计下来所有正数的和。此时,我们可以发现,新的序列是一个一正一负交替的序列,貌似叫做摆动序列吧,那么此时我们可以考虑合并(如果需要的话),合并原创 2017-09-06 13:25:22 · 963 阅读 · 0 评论 -
HDU-2017 多校训练赛10-1010-Schedule
ACM模版描述题解典型的贪心问题,用 setset 维护一下,二分搞搞就行了。代码#include <iostream>#include <algorithm>#include <cstdio>#include <set>using namespace std;typedef long long int ll;const int MAXN = 1e5 + 5;int n;struct node原创 2017-08-28 20:52:04 · 397 阅读 · 0 评论 -
HDU-6000-Wash
ACM模版描述题解给定 LL 件衣服让你去洗,洗衣房有 nn 个洗衣机和 mm 个烘干机,每个设备都给定你完成工作所需时间,但是由于设备比较烂,每个设备在某一段时间内只能洗一件衣服,问洗完这 LL 件衣服最短用时多久?这个题很简单,想要时间最短,自然是考虑烘干最后一件衣服所需的时间,那么怎么要这个最后一件衣服在最短时间内处理完呢?这里就涉及到贪心了,首先我们可以根据洗衣机洗涤时间处理出来每件衣服洗干原创 2017-11-17 19:19:41 · 500 阅读 · 0 评论 -
UVALive-7512-November 11th
ACM模版描述 题解规律题。直接看代码吧,十分好理解。代码#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int MAXN = 1111;int T;int r, c;int seat[MAXN][MAXN];int main(){ scanf("%d", &T);原创 2017-11-22 19:21:57 · 342 阅读 · 0 评论 -
CF-Educational Codeforces Round 44 (Rated for Div. 2)-C-Liebig's Barrels
ACM模版描述题解二分加贪心。先确保前 iii 桶可以分配为相邻的 kkk 个,并且保证 a[i∗k+j]−a[1]<=la[i∗k+j]−a[1]<=la[i * k + j] - a[1] lll,如果不能保证这个条件,说明此时已经无法分配相邻的 kkk 个了,而需要将剩下的没有组装的桶先分配一个满足条件的最大的,然后剩下的再分给这些没有组装完成的桶(当然这部分...原创 2018-05-22 04:42:17 · 370 阅读 · 0 评论 -
CF-Educational Codeforces Round 44 (Rated for Div. 2)-E-Pencils and Boxes
ACM模版描述题解这个题没有想象中那么难,和 CCC 题有些可借鉴之处。在排序之后,进行贪心。首先我们考虑如果要满足题意,一共需要分为 nknk\frac{n}{k} 组,因为只有组数最多才能保证每堆的铅笔数尽量少,继而可以尽量保证每组的差值小于等于 ddd,如果每组第一个数是 pospospos,那么这组数最大不会超过 a[pos]+da[pos]+da[pos] + d...原创 2018-05-22 04:55:14 · 385 阅读 · 9 评论 -
CF-Avito Code Challenge 2018-D-Bookshelves
ACM模版描述题解按位贪心,dp checkdp checkdp\ check。 稍微详细点说,那就是按照二进制位从高位开始往低位贪心,贪心第 bitbitbit 位时,检查是否可以达成分为 kkk 堆,每堆和的第 bitbitbit 位为 111,如果可以则累计。检查的时候用 dpdpdp 进行检查,检查的复杂度是 O(n3)O(n3)O(n^3),加...原创 2018-05-28 16:41:38 · 322 阅读 · 0 评论 -
CF-Codeforces Round #487 (Div. 2)-D-A Shade of Moonlight
ACM模版描述 题解数轴上 nnn 个不重叠的云,给坐标,长度都是 lll,有些云速度 111,有些云速度 −1−1-1,现风速 www,问在风速不大于 wmaxwmaxw_{max} 时,有几对云可能在 000 相遇。对于会相遇的云,肯定一个是 vi=1vi=1v_i = 1,一个是 vi=−1vi=−1v_i = -1,所以我们首先可以根据 viviv_i 将云分为两...原创 2018-06-12 21:11:28 · 548 阅读 · 0 评论 -
牛客网-2018 美团 CodeM 编程大赛-资格赛-1-下单
ACM模版描述 题解贪心,因为只能一次购买,所以要么全部按原价求和然后算满减,要么能特价的全部算特价,取小的值即可。代码#include <iostream>using namespace std;const int MAXN = 15;int n, m;int a[MAXN], b[MAXN];int c[MAXN], w[MAXN]...原创 2018-06-08 14:28:44 · 374 阅读 · 0 评论 -
牛客网-2018 美团 CodeM 编程大赛-资格赛-2-可乐
ACM模版描述 题解贪心,这里我们其实只用取一种可乐即可,因为可乐是无限的,所以我们只需要简单算一下 max(p∗a[i]+(1.0−p)∗b[i])max(p∗a[i]+(1.0−p)∗b[i])max(p * a[i] + (1.0 - p) * b[i]) 即可。代码#include <iostream>using namespace std...原创 2018-06-08 14:32:39 · 419 阅读 · 0 评论 -
牛客网-2018 美团 CodeM 编程大赛-初赛 B 轮-3-低位值
ACM模版描述题解一个规律题。默认,lll 取 000,考虑取 rrr,首先,如果有非最高位 111 存在 xxx 个,有第二个部分公式得答案加上 xxx,然后根据第三个公式得答案加 111 并且获取一个新的二进制串 r′r′r'(全是 111),以此类推,直到 r=0r=0r = 0。对于 rrr 我们需要考虑两种情况,因为上述循环的第一次取的 rrr 不一定全是 111...原创 2018-06-24 16:52:21 · 352 阅读 · 0 评论 -
51Nod-1621-花钱买车牌
ACM模版描述题解水题不水,有坑。思路炒鸡简单,首先我们记录下来 0∼90 \sim 9 每个数字的个数,然后枚举让 xx 出现 kk 次的最小花费。这里先说第一个容易错的点儿,那就是当初始状态就满族时,直接特判最小花费为 00,按照原数输出; 第二个容易错的地方便是,数字的变更的贪心策略,假如说最优解释让 xx 出现 kk 次,那么我们需要先考虑将 x−ix - i 和 x+ix + i 变成原创 2017-10-26 23:28:39 · 548 阅读 · 0 评论 -
HDU-5935-Car
ACM模版描述题解车子从起始位置 00 开始到达终点一共有 NN 个位置被标记,每个位置被标记的时间都是整数时间,并且车子速度在每段儿都可以理解为匀速运动,不过整体趋势是不递减的。问,车子最短时间达到终点的时间花费。问题的核心也就是给每一段合理的分配时限,使时间花费最小。那么我们可以逆向贪心模拟,最好一段肯定是一秒花费,根据这个速度来往前推,速度不严格递减,但是要保证每段时间是整数,所以速度可以是小原创 2017-10-17 13:44:53 · 467 阅读 · 0 评论 -
51Nod-1380-夹克老爷的逢三抽一
ACM模版描述题解首先发一下官方题解吧:按照官方题解写的代码发现自己一直在第 2121 组数据 TLETLE,很明显,这组数据是后来加上去专门卡数据的。于是发现自己的代码中忽略了一个部分是暴力的思维,在查找左右两侧可选的村民时,我用了两个循环,这显然是不行的,所以我需要使用链表的思维,这样查找的复杂度就是 O(1)O(1) 了,也就顺利的 ACAC 了。代码#include <iostream>#原创 2017-08-30 16:53:55 · 720 阅读 · 0 评论 -
51Nod-1615-跳跃的杰克
ACM模版描述题解这个题代码炒鸡简单,只要想通了就好了。这里我们贪心的想,尽量向靠近的方向跳,如果跳过了,我们考虑超过的距离是奇数还是偶数,如果是偶数,那就很好办了,可以通过使步长为 (now−n)>>1(now - n) >> 1 这一步向远离的方向蹦去,就刚好能到达 nn,如果是奇数,那就也好办,继续向原来的方向跳去,直到超过的步长是偶数即可,剩下的就同上了。今天虽然眼疾手快,抢了一个银,但是还原创 2017-09-25 11:57:31 · 2051 阅读 · 1 评论 -
计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-C-Coconut
ACM模版题解我不喜欢计蒜客,我都等了两天了,还没有地方可以提交……现在连题目都看不了,算了,题解就不写了,光发一下代码吧……代码#include <iostream>#include <cstdio>using namespace std;const int MAXN = 1111;int N, b;int C[MAXN];int D[MAXN];int main(int argc, con原创 2017-09-11 14:14:15 · 348 阅读 · 0 评论 -
51Nod-1023-石子归并 V3
ACM模版描述题解这个题的数据范围告诉我们无法通过 dpdp 来解决,但是可以通过贪心来解决,具体的贪心策略是一个叫做 GarsiaWachsGarsiaWachs 的算法。可以看看 fanhq666的博客,详细的讲述了这个算法,今天算是知道了一种新的算法,不过,感觉好鸡肋啊,并不知道这个算法除了这个地方还有什么地方可用……应该算是一个极其小众的算法。代码#include <cstdio>#inc原创 2017-09-03 12:34:03 · 647 阅读 · 0 评论 -
HDU-2017 ACM/ICPC Asia Regional Shenyang Online-1012-card card card
ACM模版描述题解水题,签到。代码#include <iostream>using namespace std;const int MAXN = 1e6 + 7;int n;int p[MAXN << 1];int w[MAXN << 1];int main(){ while (~scanf("%d", &n)) { for (int i = 1; i <= n原创 2017-09-12 11:53:05 · 397 阅读 · 0 评论 -
百练-2456-Aggressive cows
ACM模版描述题解二分 + 贪心。水题。代码#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int MAXN = 100002;const int INF = 0x3f3f3f3f;int N, C;int x[MAXN];bool check(int m){ int原创 2017-09-28 23:59:14 · 628 阅读 · 0 评论