

























自从退役之后,打了三个月的工,然后再来打这一场 Div3,庆幸自己还能打打,在最后还剩 4 分钟的时候 A 掉了 G 题,终于在比赛期间 AK
给你一个字符串,仅还有 'A', 'B', 'C' 三个字符,每次可以同时删除任意两个 'A', 'B',也可以同时删除两个 'B', 'C'。判断一个字符串能过上述操作变为空字符串
统计了一下所有字符串中每个字符串的数量,然后若 'B' 的数量和 'A' 和 'C' 的数量之和相同,则 OK
1 | |
一个字符串,每次允许选择其中一个区间,对这个区间进行移位运算,使得这个数组最终有序,使用此操作不能超过整个数组长度次数
这已经把插入排序写在脸上了
1 | |
一个矩形网格,在上面画 'V' 字形,问,当前对矩形网格上,是否是可以通过画若干个至少为 'k' 大的 'V' 来满足
首先所有 'V' 的特点是最下面的点,每个 'V' 都可以用最下面的点来标记 'V',而其两臂则可以有多长就多长即可。所以可以很轻松得出,应该从下往上遍历来解决问题
如果从下向上遍历,那么若遇到一个 '*' 点,有可能是之前 'V' 的臂,也有可能是新的 'V',同时也可以是两者的结合。所以需要一个标记数组,表示每个点是否已经被下面的 'V' 给画过了,若没有,则这里必定是 'V' 的起点。
但是若为画过,则需要同时考虑两种情况
1 | |
有 $n$ 堆石头,每堆石头有若干数量,每次从两堆不同堆石头中取出各一个,如何取使得最后所有堆的石头和最少
第一反应过来以为是背包问题,就是普通的分为两组然后尽可能均分。但是很快意识到不对,因为可以一个人在两堆中变换。然后就简单了,简单的不断取出最大的两堆,各取一个,直到不能取出两个即可
1 | |
一个双向队列,按照一定顺序往其中插入一组值,在已知接下来要插入的值的顺序后,如何确定每一次插入队列前面还是后面,使得整个序列的字典序最小
设计的逻辑很简单,其实每次插入时,若比第一个值大,那么插入到后面,否则一定会使整体值增加,反正则插入到前面即可
1 | |
和上一题差不多的同时,这次需要的是使得逆序对尽可能少
贪心解决了,每次插入的时候,若插入到最前面产生的逆序对数量少于最后面,则插入到前面,否则后面。而计算数量,应该是很久没训练了,一下子只能想到线段树,所以就直接上一个动态开点的线段树解决了
1 | |
给你一个 01 字符串,每次进行对此字符串的某个移位运算后的值进行 AND 运算的,直到此字符串不再改变,需要多少次才能使得整个字符串变为纯 0 的字符串
根据移位操作,建图,然后在拓扑,找出最长链就行了,若不能完整拓扑,则不能
1 | |
有 $n$ 段线段,首尾相连,连接处可以折叠,求出折叠后,这些线段占用的最小总长度
借用一下数据量并不大的特点,可以直接暴力找所有可能的情况。创建一个布尔数组,若此处为 true 则表示可以从这里开始,否则不能。通过滚动的方式进行 dp 最后找到任意一处为 true 则为成功。
当然此方法仅适合用于 check,所以加一个二分就能解决了
1 | |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。