随笔分类 -  贪心

摘要:题解 分行考虑,每一行都被火山截断为若干个区间(由于$n$数据范围较大,只考虑有火山的行)。如果上一行不存在与当前区间有交集的区间,则将其删去,判断最后是否留有可行区间即可。 具体实现:将每行的区间放入一个集合之中,对于一个区间$[l,r]\(,二分上一行中第一个左端点\)\ge l$的区间和最后一 阅读全文
posted @ 2021-09-24 15:42 violet_holmes 阅读(61) 评论(0) 推荐(0)
摘要:题解 对于一对方向相反的牛,它们之间的顺序是无关紧要的,因为一定有一头会看到对方被挤奶,所以只需要考虑方向相同的牛。对于向左的牛,从右到左挤奶,反之亦然。 代码 #include<bits/stdc++.h> #define int long long using namespace std; co 阅读全文
posted @ 2021-09-24 15:41 violet_holmes 阅读(38) 评论(0) 推荐(0)
摘要:题目链接 题解 对于需要颜色相同且位置不同的元素,易得同种颜色数量的最大值越小,越容易构造成功。因此对于颜色、位置均需相同的元素,利用优先队列使其选择数量最大的元素填充。求出剩余元素中同种颜色数量的最大值$ma$,将剩余元素按照值从小到大存储。因为$i$和$i+ma$元素值一定不等,所以两者可以互换 阅读全文
posted @ 2021-08-12 11:15 violet_holmes 阅读(56) 评论(0) 推荐(0)
摘要:题目链接 题解 将$a_i,b_i$​4种情况的书分别存入4个优先队列。首先考虑满足$k$​,也就是在两人喜欢的书数目$\le k$、所选书目$\le m$​的条件下优先选择$a_i=b_i=1$的书,其次是将$a_i=0,b_i=1$和$a_i=1,b_i=0$的两本书绑在一起选择。如果这样选择后 阅读全文
posted @ 2021-08-12 11:14 violet_holmes 阅读(54) 评论(0) 推荐(0)
摘要:题目链接 题解 将所有逆序对$(x_i,y_i)$按照$y_i$降序排序,若$y_i$相等则按$a_{x_i}$($a$​为原序列)升序排序,若两者均相等则按$x_i$升序排序即可。 对于序列$a$,如果每次寻找一组逆序对并将它们交换,易得经过若干组操作后一定可以化为单调不降的序列,因此我们只需保证 阅读全文
posted @ 2021-08-12 11:13 violet_holmes 阅读(39) 评论(0) 推荐(0)
摘要:题目链接 题解 先处理一定无法入选的情况:将剩下的选票全部给$i$号人仍无法超过排名第$k$的人,或$i$号人无选票且没有剩余选票。然后是一定可以入选的情况:$i$号人有选票,并且使排名前$k+1$中所有选票少于他的人选票超过他所需选票$>m-a$,或者所有人均可入选。其余为有可能入选的情况。 具体 阅读全文
posted @ 2021-04-10 17:04 violet_holmes 阅读(77) 评论(0) 推荐(1)
摘要:题目链接 题解 由于数据范围无法枚举$n$量级的次数,只得处理每个障碍物对答案的影响。可以发现,每个障碍物所在列的另一个方格无法被$2\times 1$的矩形覆盖,只能将矩形横过来,而这会使两行的覆盖错位(由左向右考虑)。这时我们需要下一个障碍物将其纠正,当相邻两障碍物同行且下标差为偶数,或异行且下 阅读全文
posted @ 2021-04-09 21:45 violet_holmes 阅读(56) 评论(0) 推荐(0)
摘要:题目链接 题解 如果$M>A+R$的话(可能还要加上些奇奇怪怪的条件,总之就是全部弄成$M$最优的情况),把高度变为平均数一定最优,这样可以最大化使用$M$。如果$M$没有太大用处,而是要在$A,R$之间找平衡的话,可以发现最终高度一定为某个柱子的高度。简单证明:将$h$数组升序排序,设$h_i<r 阅读全文
posted @ 2021-04-08 18:18 violet_holmes 阅读(67) 评论(0) 推荐(0)
摘要:题目链接 题解 $O(\sqrt n)$竟然能过!暴力的胜利 利用贪心思想,我们希望最大的城堡最高,这样总塔数最小。但是高堡需要比它低的城堡做铺垫,因此总趋势应该是先单调不降后单调不升(至少我们可以将之摆放成这样)。也就是设最高值为$sum$,一排城堡应如此:\(\{n,n+1,...,sum(,s 阅读全文
posted @ 2021-04-01 17:38 violet_holmes 阅读(76) 评论(0) 推荐(0)
摘要:题目链接 题解 由于数据范围无法枚举$n$量级的次数,只得处理每个障碍物对答案的影响。可以发现,每个障碍物所在列的另一个方格无法被$2\times 1$的矩形覆盖,只能将矩形横过来,而这会使两行的覆盖错位(由左向右考虑)。这时我们需要下一个障碍物将其纠正,当相邻两障碍物同行且下标差为偶数,或异行且下 阅读全文
posted @ 2021-03-25 22:20 violet_holmes 阅读(23) 评论(0) 推荐(0)
摘要:题目链接 题解 贪心呐,策略是由倒数第二层节点向上递归,将所有未交换的子节点与递归到的节点互换。若根节点未移动,则将其与任意子节点互换即可。 简单证明:节点$i$一定需要和与它一条边即可相邻的节点(父结点或子节点)交换。设节点$i$深度为$d_i$,且$d_$及以下的节点全部处理完毕(也就是只剩下它 阅读全文
posted @ 2021-03-25 22:19 violet_holmes 阅读(53) 评论(0) 推荐(0)
摘要:题目链接 题解 设$a_i$表示节点$i$被覆盖次数,用差分求出。可以发现,如果存在节点$i$使得$a_>a_i,a_{i+1}>a_i$则一定不存在被所有线段覆盖的节点($i$一定会把两边的线段断开),因此最长单峰子序列(先单调不降后单调不升)的长度即为答案。正反2次求LIS,记录$l_i,r_i 阅读全文
posted @ 2021-03-20 20:43 violet_holmes 阅读(51) 评论(0) 推荐(0)
摘要:题目链接 题解 因为只需关注最大值,所以每次使最大值$/2$,如果已有此值则继续$/2$直至出现不在$x$中的值,如果全部在$x$中则现在的序列$x$即为最优方案。设当前$x$中最大值为$a$,不断进行$a/2$得出的数为$b$,因为$b/2$得出的数$a/2$也可以得出,不存在对非最大值进行操作可 阅读全文
posted @ 2021-03-13 18:27 violet_holmes 阅读(64) 评论(0) 推荐(0)
摘要:题目链接 题解 可以发现,将$a_i$自$A$移动至$B$段($A,B$为前缀、后缀)产生的结果为$sum(B)-sum(A)+=2\cdot a_i$,而最终状态应为$|sum(B)-sum(A)|=0$。因此我们可以枚举$a_i$,及其所在段(\(A/B\))。当$a_i$在$B$中时,使用ma 阅读全文
posted @ 2021-03-11 19:30 violet_holmes 阅读(86) 评论(0) 推荐(0)
摘要:题目链接 题解 可以发现Ciel所处如下三种情况之一:①无法击灭对方全部攻击卡牌;②可以击灭全部攻击卡牌,但无法击灭防御;③可以击灭对方全部卡牌。 对于第一种情况则尽力使双方卡牌权值差最大,使用田忌赛马策略使用我方最优卡牌攻击敌方最劣卡牌。对于第二种情况则使我方击灭对方全部攻击卡牌即可,以最优攻击最 阅读全文
posted @ 2021-03-08 20:14 violet_holmes 阅读(75) 评论(0) 推荐(0)
摘要:题目链接 题解 可以发现$a$序列的目标状态一定是从$0$开始的连续的($[0,k]$间每个数均出现过)序列。因此用$pos$数组记录每个$a_i$值出现的次数,从前向后遍历每个员工。如果出现$pos[i]=0$则$ans+1$,并从未统计的员工中选一个填补空缺,直至所有员工均被统计。此外,如果下标 阅读全文
posted @ 2021-03-08 20:12 violet_holmes 阅读(76) 评论(0) 推荐(0)
摘要:题目链接 题解 对于$b_i\ge 0$可以提前处理,因为如果$r$一直增加仍无法完成,减少也一定不可行。这一部分按照$a_i$从小到大排序,因为较小的$a_i$容易满足。 对于$b_i<0$,已知$r\ge a_i$我们希望$r+b_i\ge a_{i+1}$,也就是$r\ge max(a_i,a 阅读全文
posted @ 2021-02-25 22:22 violet_holmes 阅读(76) 评论(0) 推荐(0)
摘要:题目链接 题解 因为$T$段内容均为相同的,最多只需$n$个重复区间即可包含最长不降子序列中的全部元素。因此将复制$n$段$a$数组进行LIS计算即可得出包含答案序列全部元素的上升子序列,朴素dp时间复杂度为$O(n^4)$,可以通过。而对于剩下的重复区间,利用贪心思想取$a$数组中出现次数最多的元 阅读全文
posted @ 2021-02-07 17:27 violet_holmes 阅读(94) 评论(0) 推荐(0)
摘要:题目链接 题解 因为由$n$个点、$n$条边组成的图一定为若干个环,所以不需考虑$l,r$在具体客人中的分配。易得两人间空隔的椅子数$=max(l_i,r_i)$,而我们需要找到一种排序方式使得$max(l_i,r_i)+max(l_{i+1},r_{i+1})\le max(l_i,r_{i+1} 阅读全文
posted @ 2021-01-26 21:34 violet_holmes 阅读(89) 评论(0) 推荐(0)
摘要:题目链接 题解 可以想到,这道题需要维护每日的内核数,并利用贪心思想找出该日价值从小到大的前$k$个内核。第一想法是优先队列+二分,但无法处理出队,于是卡住了(# -_ゝ-)。此后阅读了一篇题解,发现可以使用权值线段树。 线段树中维护当日每个价值的内核个数(因为$p_i\le 10^6$,不需要离散 阅读全文
posted @ 2021-01-23 12:06 violet_holmes 阅读(81) 评论(0) 推荐(0)