10 2023 档案
摘要:分析 看到这个题就想到了二维偏序。 你们很自然地,以 为第一关键字降序排序,当有若干个片 相等时,我们发现由于 ,所以排到最后的片一定能把这些 相等的片都统计上,而前面的片能否统计是依赖于 ,所以考虑如何让后面的片更好统计,显然 \(a
阅读全文
摘要:分析 发现每个字符串只会被它的后缀规定,那么就从后往前计算,使得计算每个字符串的时候其后缀已经合法。 因为每一次计算我们都只想删最少的字符,而且删得越少这个字符串的字典序就越大,所以它的前缀的最小字典序就越大,需要删的字符就越少,所以对于每一次计算都只删最少的字符的贪心策略符合全局最优,所以这个贪心
阅读全文
摘要:分析 先对每一列都做 DP 寻找极长单调不降区间,能够得到若干极长单调不降区间,只要询问的区间是这些区间的子区间,那么说明在这个区间内必有一列的这个区间是单调不降的。 思考如何快速判断子区间。 用 表示以 为所有左端点为 的区间的右端点最大值,那么对于询问
阅读全文
摘要:分析 思考对于 的每个数而言,贡献是一定的,它最多只能换掉一个数。 那么贪心地能换就换,但是如果换小的可能会导致更小的数换不掉,那么就换能换的最大的,这样不会干扰只能换小数的其他数,能换这个数的可以去换其他数,如果连其他数都换不掉说明这两个数等效,换谁都一样,所以这样换一定是最优的。 如
阅读全文
摘要:分析 发现操作 次后就会回到初状态,于是将状态打表,将 即可。 代码 #include <iostream> using namespace std; constexpr int MAXN(1000007); int a[6][3] = { {0, 1, 2},
阅读全文
摘要:分析 看到异或不难想到 01Trie。 不难想到,当两个数的点权相等的时候,我们可以当这两个点是一个点,因为连边的费用为 。 那么对于一个序列 ,若存在 种不同的权值,那么在 Trie 树上子节点数为 的节点就有 个(因为如果一个数新加进来
阅读全文
摘要:分析 手玩样例发现连一条边实际上是将一个多边形分割成两个部分,而且不能在这两个部分直接连边,发现这两个部分是完全独立的,于是考虑区间 DP。 设状态 表示将 区间连成树的方法数量。 那么存在两种转移,一种是 间不直接连边,这样中间的点都需要
阅读全文
摘要:分析 容易想到可以枚举每个字母,分别求其最小 取 。 思考对于一个 ,如何判其不合法。容易想到如果存在一个没有这个字符的长度大于等于 的子段,那么这个 就不合法。 那么我们就知道如何求最小合法 了。找到最长的没有这个字符的子段
阅读全文
摘要:分析 题意为选出最多的操作使机器人执行完仍停留在原地。 分为左右和上下两类,则每一类的可执行操作数都是操作次数最少的一种操作的二倍(因为正反操作都要执行才能抵消)。 直接统计每种操作的操作次数计算答案即可。 代码 #include <iostream> using namespace std; co
阅读全文
摘要:分析 因为一个数不可能同时大于并小于它两边的数,所以两种数的集合不存在交集。 所以分别扫一遍两种数的个数加在一起即可。 代码 #include <iostream> using namespace std; constexpr int MAXN(1000007); int a[MAXN]; int
阅读全文
摘要:分析 观察到题面是求最小极差,想到 two-pointers。 按 大小排序,然后发现一个子段的子段的答案肯定不优于原子段。 和CF1777C以及NOI2016区间一样,选取合法左端点然后选取最大合法右端点。 值得注意的是,本题要求首尾相接,所以为了避免选取的线段无交集,将 \(r\
阅读全文
摘要:分析 注意到字符集大小很小,那么很容易就会产生回文,那么合法序列的种类就会比较有限。 思考对于不同长度而言合法序列的种类,显然长度为 时无回文,长度为 只要两个字符不同就无回文。 尝试扩展到长度为 时的情况,显然 ,\(s_2 \n
阅读全文
摘要:分析 看着感觉很不可做,因为第一个人走的方式有巨大的后效性。 但是发现 ,那么第一个人走的方式一定是先在上面走一段,再在下面走一段(直接走下面视为先在上面走了 个数) 设第一个人在 处从第一行下去,那么第二个人能选择的数之和一定为第一行 的后
阅读全文
摘要:分析 放桌子有两种放法,一种是上下放,一种是左右放,分别计算最小值取 即可。 注意到原题使用的是平面直角坐标系,于是将原图顺时针旋转 ,将下标表示方式与代码中下标的表示方式统一,相应的,左下角和右上角也变成了左上角和右下角。 代码 #include <i
阅读全文
摘要:分析 首先对于小于 的数答案一定是 。 然后发现 分别是 的二倍,而且对于三种做法做一块披萨所用的时间都是一样的,所以只要一个数能被这三个数凑出来,最后的总用时就是这个数乘以做一块披萨所用的时间。 作为 \(3、3
阅读全文
摘要:分析 看到求最大值最小,不难想到二分。 很容易想到二分最大可取边长度。 思考如何check。 首先如果存在一点 符合条件,那么我们很难判断那条边该翻哪条边不该翻,很难去check。 那么大胆假设对于每个点 ,每条边的方向只会确定为一个状态。 尝试证明。 假设存在边 \(a, b
阅读全文
摘要:分析 首先看到那个 再加上样例,我们就能意识到在不是特别多的操作次数后这颗树上的值就会全变成 。 因为没有子节点在一次操作后显然就会变成 ,然后第一次叶节点就会变成 ,然后下一次子节点中只有叶节点的就会变成 ,以此类推,理论上最多操作
阅读全文
摘要:分析 看到题面里面的子序列觉得很恶心,如果是子段感觉就会比较好做。 如果直接填上子序列中间的空隙就可能会取一些比必须要取的数更大或者更小的数,影响我们的答案。 那么就可以直接排序,使得子序列中间的空隙的数必然 左端且 右端,不会影响我们的答案(因为极差只看最大最小
阅读全文
摘要:分析 首先计算单个排列中的逆序对数量。 我们发现这东西可以分为两类,一类是两个数在原排列和倒着的排列(这里称为“反排列”),另一类是两个数一个在原排列,一个在反排列的。 对于第一类,我们发现,原排列中的顺序对是反排列中的逆序对,所以原排列的所有数对要么在原排列中是逆序对,要么在反排列中是逆序对,所以
阅读全文
摘要:分析 发现操作2不会改变数的奇偶性,故无视。 那么操作就是单纯删一个数。 对于一个连续出现 个奇偶性相同的数的子段,需要删 个数(因为只剩下一个数就不会和相邻的数奇偶性相同了)。 觉得找序列太麻烦,观察到连续出现 个奇偶性相同的数的子段有 \(x - 1\
阅读全文
摘要:发现博客东西太多了,整合一下。 游记 第一场模拟赛游记 NOI春季测试游记 HL第一次集训游记(一部分) LNOI2023游记 HL第二次集训游记 CSP-S 2023 R1游记 CSP-S 2023 R2游记 题解 CF1839A CF1839B CF1839C CF1839D CF1839E 算
阅读全文
摘要:分析 第一眼:博弈论。 第二眼:呃……贪心? 实际:DP。 首先想这个游戏大抵存在必胜策略,否则不会让我们求。 思考先手必胜条件,就是如何让这个数组最后只剩下一个数。 设数列之和为 。 发现每次操作给两个数减的数字是一样的。那么对于每次操作, 都为两者之间更少的
阅读全文
摘要:分析 啊这道题就做得很难受了…… 手玩一下样例,不难发现答案就是分出 段不是单调上升序列的序列,求这些序列的最小长度和。 显然有状态 表示 序列分成 段的最小长度和。 转移很好想,即枚举 , 分别表示左区间的右端点以及段数,空间
阅读全文
摘要:分析 首先对于最后一个元素为1的数组,显然不存在合法构造方式。为什么?因为每个1都需要至少一个数插入在它后面对它完成翻转,如果最后一个数为1,这时没有数在它后面翻转它,所以这时无法构造。 然后我们很naive地想让每个1都只被翻转一次,那么很好想到,对于一个形如\(11\dots100\dots0\
阅读全文
摘要:分析 根据题意,对于所有 的灯,我们最多可以一次开 盏。 最优方案一定是只开 相同的灯,因为开一盏大的会使等于 的灯少开一盏,而且最后不会坏掉,会一直占着一个名额,从而使当前 一直到更大的 的轮次一直少开一盏,这个亏损必定大于等于多开一盏大\(a\
阅读全文
摘要:分析 可以很容易地想到如果只有1要求的话答案就是 。 最优策略显然是在每个整除分块的第一位放一个1。 思考加入2条件如何修改。 显然当最后一块的大小不为1时,大于1的部分后缀和为0。 所以需要在最后一位加入一个1。 所以答案为\(\begin
阅读全文
摘要:Day -? 得知了自己初赛的分,58分,不算很高,但是能进复赛了,感觉有点低落,毕竟有点低。 然后想了想又不低落了,至少19年我因为只报了普及没得考(不过就算报了初赛过了也可能连格雷码都做不出来)。 Day -2 大家决定举办手速杯,这是好的。 但是赛题是LCT板子,这是坏的。 然后就和猫和bot
阅读全文