随笔分类 - 算法—贪心
摘要:题意 "题目链接" 给出一个排列,以及$m$个形如$(x, y)$的限制,表示若$x$在$y$之前则可以交换$x, y$。 问$n$位置上的数最多能前进几步 $n \leqslant 3 10^5, m \leqslant 5 10^5$ Sol 每次遇到这种动来动去的题基本都做不出来qwq 我最开
阅读全文
摘要:题意 "链接" Sol 神仙题+ "神仙做法" %%%%%%%% 我再来复述一遍。。 首先按照$y$坐标排序,然后维护一个扫描线从低处往高处考虑。 一个连通块的内状态使用两个变量即可维护$ans$表示联通块内的最大答案,$f$表示联通块内$k=1$的数量 若当前的水超过了当前的挡板,那么将当前联通块
阅读全文
摘要:题意 "链接" Sol ~~自己都不知道自己怎么做出来的系列~~ 不难观察出几个性质: 1. 最优策略一定是先把某一行弄黑,然后再用这一行去覆盖不是全黑的列 2. 无解当且仅当无黑色。否则第一个黑色所在的行$i$可以先把第$i$列弄出一个黑色,接下来第$i$列的黑色可以把第$i$行全部弄成黑色。 然
阅读全文
摘要:题意 "题目链接" Sol 最直观的做法是wqs二分+dp。然而还有一种神仙贪心做法。 不难想到我们可以按权值从大到小依次贪心,把左右两边的打上标记,但这显然是错的比如$1\ 231\ 233\ 232$。我们会得到$234$而不是$463$。考虑加入一种反悔机制,也就是说我们可以增加一种决策来取消
阅读全文
摘要:题意 "题目链接" Sol 这题就是一个很显然的贪心。。。 首先二分一个答案,然后check是否可行。check的时候我们需要对每个位置$i$,维护出所有左端点在$i$左侧,右端点在$i$右侧的所有区间。最优策略一定是加右端点最远的。 然后就做完了, 复杂度$O(nlogn)$ cpp includ
阅读全文
摘要:题意 "题目链接" Sol 显然整个序列的形态对询问没什么影响 设权值$ =s$的有$k$个。 我们可以让这些数每次都被选择 那么剩下的数,假设值为$a_i$次,则可以$a_i$次被选择 一个显然的思路是每次选最大的C个 那么只需要判断$\sum a_i =(c k) s$即可 权值线段树维护一下
阅读全文
摘要:题意 "题目链接" 给出长度为$n$的序列$a$,序列中的元素取值为$[ 2e9, 2e9]$ 找到两个位置$(i, j) (i define LL long long // define int long long define uint unsigned int define chmax(a,
阅读全文
摘要:题意 "题目链接" Sol 我是这样考虑的:从大到小考虑每个$l, r$,最大的$l$应该和最大的$r$匹配(不然就亏了),其次次大的$r$应该和次大的$l$匹配 然后就过了。。 cpp / / include define Pair pair define MP(x, y) make_pair(x
阅读全文
摘要:题意 "题目链接" 给出一棵树,每个节点有权值,选出$k$个联通块,最大化 $$\frac{\sum_{i \in S} a_i}{k}$$ Sol 结论:选出的$k$个联通块的大小是一样的且都等于最大联通块的大小 证明:因为我们是在保证分数最大的情况下才去最大化$k$,一个很经典的结论是单独选择一
阅读全文
摘要:题意 "题目链接" Sol 又是一道神仙题??。。 把绝对值拆开之后状压前面的符号?。。 下界显然,但是上界为啥是对的呀qwq。。 cpp include using namespace std; const int MAXN = 1e6 + 10; inline int read() { char
阅读全文
摘要:题意 "题目链接" Sol 这题打cf的时候真的是脑残,自己造了个 的数据开心的玩了半天一脸懵逼。。。最后还好ycr大佬给了个思路不然就凉透了。。。 首先不难看出我们最后一定可以把字符串弄成$aaaabbb$的形式,若当前位和下一位不一样就直接转就行了 注意特判一下最后一个位置 cpp / / in
阅读全文
摘要:题意 "题目链接" Sol 首先不难想到一种贪心策略:能弹则弹,优先放A 然后xjb写了写发现只有$40$,原因是存在需要决策的情况 比如 $A = {10}$ $B = {8}$ 现在进来一个$7$,看上去很难判断$7$到底放在哪里,如果放$A$,后面来个$9$,再来个$6$,我们就凉了。 但是如
阅读全文
摘要:题意 "题目链接" Sol 不难发现题目给出的是一个树,其中$\frac{i}{K}$是$i$的父亲节点 首先,当$d_i$互不相同时,一个显然的贪心策略就是优先给编号小的分配较大的权值。可以排序后dfs完成。 但是,当$d_i$相同时,可能存在这样一种情况:把编号小的子树内权值较大的节点,和某个编
阅读全文
摘要:题意 "题目链接" Sol 震惊,HNOI竟出NOI原题 直接在反图上贪心一下。 cpp // luogu judger enable o2 // luogu judger enable o2 include define Pair pair define MP(x, y) make_pair(x,
阅读全文
摘要:题意 "题目链接" Sol 非常妙的一道题。 首先不难想到拓扑排序,但是直接对原图按$k$从小到大拓扑排序是错的。因为当前的$k$大并不意味着后面的点$k$也大 但是在反图上按$k$从大到小拓扑排序就是对的。为什么呢?因为题目中给出的条件是下限, 而在反图上拓扑排序就相当于卡着下限做,因此一定是最优
阅读全文
摘要:题意 题目链接 给出一个字符串,每次操作可以使得字符串缩短一位,且第$i$位必须要保证与变换前的这一位或下一位相同, 问使得整个字符串全相同最少的操作次数 Sol 300P的题我都要想10min啊,还是太菜了。。 首先我们可以枚举一个字母,强行让他成为最后的答案 对于末尾与它不同的数只能一个个删掉,
阅读全文
摘要:题意 题目链接 给出一棵树,删除一些边,使得任意联通块内的任意点距离不超过$k$ sol 考场上想的贪心是对的:考虑一棵子树,如果该子树内最深的两个节点的距离相加$>k$就删掉最深的那个点,向上update的时候只返回最深的点的深度 然而却苦于写不出代码。。。
阅读全文
摘要:题意 已经很简洁了吧。 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。 (1)每次只能在某根柱子的最上面放球。 (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。 试设计一个算法,计算出在n根柱子上最多能放多少个球 Sol 这题有两种做法 1:贪心,能放
阅读全文
摘要:Description Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子。第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 N×M 的排列来填入她 N 行 M 列的棋盘,并且小H在初始的 N×M 次交换操作后,又进行了 Q 次额外
阅读全文
摘要:Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳。作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争。通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为 drd 的巨龙,它掌握着睡眠之精髓,能随意
阅读全文