2023.10 做题纪要 #3
2023.10.23
CSP。
P9755 [CSP-S 2023] 种树
考虑二分答案,设最后答案为
考虑一个显然的贪心,到
ABC304Ex Constrained Topological Sort
额。
所以上面这玩意可以直接加强到 DAG 上哈哈。
首先注意到一件事情,就是如果
那么肯定还是要贪心的按照
2023.10.24
好困。
内心又开始恐惧了,真心害怕这种“完全在能力范围内的题考场上做不出来”的情况再次发生。
快进到流浪街头憋屈致死。
今天才发现投计蒜客的那个题已经考完了,但是我也没号所以也看不到都打成啥样(yspm 给我投的),扔个链接在这里吧。
AGC019E Shuffle and Swap
还是比较简单的。
首先顺序肯定没有关系,那么我们假设一共有
整理一下发现答案就是:
那么我们只需要对于所有的
直接求就是
AGC017F Zigzag
考虑一个朴素状压:设
那么考虑轮廓线 DP,每次只填一个数,这样我们已经填好的这些位置的左边的线段位置就不需要记录了,我们只需要记录一下左边那条线的横坐标即可,这样复杂度就变成了
考虑将记录左边线的横坐标这一部分删掉。发现如果左边那条线在当前点的左边,那么这条线其实就没有用了,因为向左一定不会到达这条线,那么我们其实可以将这条线给向右折过来,这样就一定为完整的一条线了,那么就不需要记录横坐标了,于是复杂度
CF1827E Bus Routes
首先容易发现如果叶子之间连通了那么所有点就都连通了,于是我们只需要考虑叶子,也就只需要考虑所有以叶子开始的路径。
考虑随便找一个根,然后求出每个叶子经过一条路径能到达的最浅的点,记这个点为
2023.10.25
美好的一天从美好的一天开始!
不知道应该从啥开始,放只科米吧
P8426 [JOI Open 2022] 放学路(School Road)
咱就是说没事别这么折磨自己行不。
这个从部分分一步一步分析。
发现
首先我们肯定只需要找出
这就是本文所说到的方法了,考虑直接删一度点缩二度点叠合重边,那么最后的
具体来讲,删一度点直接删就行,叠合重边的时候如果两条边的长度不相等,那么就将这条边的边权设为
图为点双连通分量:
注意到如果上述算法最后仅剩下一条边且不为
虽然这个结论并不在一般图上成立,但是可以证明它在点双上是成立的。或者由于它给出了点双的部分分,你猜测它在点双上是成立的。
考虑如果最后剩下若干个点,那么这些点除了
我们首先给这张图定向,方向为最短路的方向,即
如果一个点入度小于出度,我们称其为红点,否则称其为蓝点。
考虑
那么在这条路径上,一定存在一条边
那么我们只需要跑上述算法就能很轻松的判定答案了。
正解:
实际上正解就很简单了,
P6790 [SNOI2020] 生成树
求一个仙人掌图上加一条边的图的生成树个数。
可以发现,这张图是广义串并联图,那么也就是说最后可以缩成一个点。
那么仍然考虑上述做法,设
- 删一度点:那么这条边一定是要选的,把
乘到答案上; - 缩二度点:
; ,没有 的原因是中间的点必须得和左右两个点其中一个连通。
- 叠合重边:
; 。
直接做即可。
P9333 [JOISC 2023 Day2] Council
首先过程实际上是将两个人的选择删除。
直接令
那么只考虑这两者,如果一个
改下式子,有
考虑一个类 FWT 的过程,首先对于每个
2023.10.26
想起之前谁发的犇犇:
看到有人说“必须要努力了,于是开始了一天三道题的高强度训练”,虽然感觉他确实是认真说的但是还是忍不住想笑。
被攻击到了 /kk。但是我觉得一天做三道题真的很困难了啊,为什么会有卷怪能一天卷完一整个 ≥ *3000 的题单啊????
P9330 [JOISC 2023 Day1] Festivals in JOI Kingdom 2
首先正确的贪心方法肯定是按照右端点从小往大选。
我们考虑先计算出所有最后答案正确的方案数,再容斥一步就是答案。总方案数为
然后考虑如何统计两种方法答案相同的方案。首先假贪心的答案在任意一个前缀内肯定答案不会超过真贪心,而且如果某一时刻假贪心答案小于真贪心且假贪心选的右边界比真贪心靠右,那么之后假贪心答案一定不可能等于真贪心,进一步发现当两个答案差大于等于
那么按照这种思想,我们可以设计出一个弱智 DP,考虑
发现记录集合
再仔细分析一下这个做法的转移可以优化到
我们将真贪心选中的区间称为红区间,假贪心选中的区间称为蓝区间,若两者重合则称其为紫区间,其它的区间称为黑区间。那么,如果将所有区间右端点从小到大排序,那么一定是红蓝交替再加上若干黑区间。
考虑再刻画一下合法的选择方案,对于红区间,两个相邻的红区间的右端点内不存在一个完整区间;对于蓝区间,两个相邻的蓝区间内不存在某个区间的左端点。
考虑这样一个插入顺序:每次插入一对区间与红区间到上一个红区间内的所有黑区间。对于所有黑区间,它们的左端点不能在某两个蓝区间的间隔内,这可以记录一下之前有多少非蓝区间内的间隔,然后用一个上升幂来计算。然后再计算一下黑区间与红蓝区间之间的顺序。这样就可以直接得到一个
继续优化就得考虑压缩状态了。注意到这里我们还单独记录了之前这些区间内有多少位置不是在蓝区间间隔内,这样的原因是左端点的选取限制很大。那么我们考虑倒着插入,这样左端点是枚举的而不是计数的。发现,此时右端点是可以插入到之前区间的任意一个间隙之间的。那么我们就只需要记录区间数,不需要再记录有哪些位置能插入了。
拿两端都不是紫区间的情况来举例子,假设当前考虑到
其中
那么直接这样转移即可做到
进一步分析,可以将上面的式子化简一下,发现是一个差卷积的形式,实际上是一个半在线差卷积,分治 NTT 即可,但是是任意模所以还得 MTT,但是你也可以跑 Karatsuba,但是狗都不写这些玩意,直接
AGC020D Min Max Repetition
哇,我又啥都不会了!!!!!
首先考虑最大值最小是啥,肯定是让较少的一个作为较大的分隔符,假设
考虑最优状态下,肯定是对于一个前缀为连续的
假设前面选了
2023.10.27
哇,我昨天只做了两道题!!!!我效率太高了!!!!恼。
joisc 题都太可怕。
print reverse($a=$/.<>)eq$a?Yes:No
P9339 [JOISC 2023 Day3] Cookies
假如箱子都固定了,那么我们有一个显然的贪心策略:按照箱子从大往小,每次填入个数最多的若干种曲奇,如果某一时刻没有这么多种曲奇就不合法,否则合法。
那么我们可以将题目的抽象为,令
但是上述贪心仍然还是比较抽象,我们需要找到是否有解的充要条件来快速判断。设
考虑上述问题可以建出一个网络流图,源点向左部点连
由最小割最大流定理,我们要证即为最小割
考虑左部点不割
如果最小割
那么令
考虑优化,首先发现由于当前选的数的最小值为 bitset
优化的,所以上个 bitset
即可做到
P9135 [THUPC 2023 初赛] 快速 LCM 变换
首先考虑进行这样的操作后整体的 LCM 会怎么变化。
先只考虑一个质因子,那么删除了两个数后,可以发现剩下的最大值一定是原来的最大值、次大值或次次大值,然后再与新的
注意到,如果
如果删除的不是最大值,那么最后的最大值一定是原来的最大值与
2023.10.28
哇,我昨天又只做了两道题!!!!
CF1817E Half-sum
首先排序后,显然会选一个前缀为较小值,一个后缀为较大值。
然后就是怎么合并,前缀肯定要尽可能小,后缀肯定要尽可能大。把操作看成一棵树,那么实际上每个点的贡献系数就是
那么现在问题就变成了,找到一个分界点
设
考虑
假设
有另外一种做法:考虑到对于两个决策点
P8424 [JOI Open 2022] 跷跷板(Seesaw)
首先有一个显然的性质:删左边会使重心右移,删右边会使重心左移。
给出一个区间,判定合法是容易的,只需要能往哪走就往哪走即可,容易证明这种做法是对的。而由此我们可以推出更简洁的结论:只要对于每一个长度,存在一个区间的重心在给定区间内,那么这个区间就一定是合法的。这个也是容易证明的。
那么,我们的问题就变成了,选择一个区间,使得区间包含每一个点集中的至少一个点。注意到这个区间必须包含最一开始的重心,那么意味着对于每一个点集内,只有一开始重心左边的第一个与右边的第一个点是有用的,如果包含了更靠左或更靠右的点那么一定包含这个点,所以我们只需要考虑这些点即可。
那么就是个很简单的问题了,找出一个最小的区间使得满足
AGC017E Jigsaw
发现一定是一个
2023.10.29
$_=<>;print-/(.)/+s/$1//g
AGC018F Two Trees
哦哦哦哦哦哦。
首先注意到一个点所填的数的奇偶性一定与其儿子个数相反,那么说明如果两个点的儿子个数奇偶性不相等则一定无解。
考虑一个神秘的转化:将点权变成给边定向,定义入度为正出度为负,发现,如果令每个点的出度入度之和为
UOJ821 【UR #26】石子合并
人生中打的第一场 UR,因为 T1 预处理少了阶乘喜提 30 分,成功掉分,哦哦哦哦哦哦哦哦哦哦哦。
考虑这样一件事情:如果一个数后面有严格比他小的数,那么这些严格比他小的数一定和这个数在同一个序列中相邻出现,因为如果某一时刻选择了这一段的开头,那么说明这一段的开头是比另一个数组的开头元素小的,而后面的数均严格比它小,也就是说接下来一定会把后面严格比他小的数全部选上。于是我们可以将所有严格比前面小的数删去,显然答案是不变的。
这样我们就只考虑
考虑快速计算出后面那个式子。首先比较无脑的做法就是发现后面是关于
实际上你发现前面快速幂的
2023.10.30
恼了,这下彻底不可能完成 10 月 to-do list 了。最后写两天,11 月开始打模拟赛了。
CF1148F Foo Fighters
题目给的限制很诡异,我们转化一下。出现奇数次可以让我们联想到异或,假如我们令
考虑从前往后求出每一个数的第一次出现位置。接下来倒着扫一遍,注意到,当扫到某个数为这个数的第一次出现位置后,这个数在后面就永远不会出现了,那么我们可以对每一个这样的第一次出现的数的集合考虑,如果当前选中的集合中的数不超过一半,那么就选择当前的集合,这样会使得第一次出现的集合取反,就一定超过一半了,直接这样构造即可使得总和超过一半。
P9069 [Ynoi Easy Round 2022] 堕天作战 TEST_98
倍增值域分块板子。
发现如果小于
哦这玩意其实就是 P7447 [Ynoi2007] rgxsxrs,lxl 讲课的时候讲的这个,但是这题好像还需要
P9597 [JOI Open 2018] 猫或狗
设
然后直接套个动态 DP 就完了。
P7564 [JOISC 2021 Day3] ボディーガード
传统艺能:还没写题解但是先口胡一下并且把题解放在这里以显示自己看起来一天做了挺多道题的假象。
首先可以将题目画到一个二维平面上,横坐标为位置纵坐标为时间,那么每个人就是平面上一段斜率为
发现所有过程都是斜着的,我们把坐标系旋转一下,这样就变成了每次向右或向上移动,有若干条横纵线段。发现,这些线段组成的格点共
那么现在考虑如何查询。对于任意一个点,它的路径肯定是到达某个格点然后再加上格点的权值,容易发现肯定是先一直往上走,然后在某个格线往右走到格点,或先向右走然后沿格线向上。两者取
我们将所有在同一个竖列中的询问拿出来考虑,发现,每一条格线的贡献是一个关于询问点的横坐标到格线右端点的距离的一次函数,设这个距离为
注意到,从上往下的
2023.10.31
恼了,十月做不完十月 to-do list 了。摆烂了,就这样了,明天开始打模拟赛了,要不然 NOIP 再打不好就真退役了。
CF1491F Magnets
妈了我真傻逼。想了一堆无意义东西,然后正解极其简单。
考虑从前往后扫,每次查询
CF1427F Boring Card Game
首先考虑如果不管交替的限制,任意顺序加入,那么显然可以用一个栈来维护。
那么,用栈求出一组方案后,我们可以将栈的限制建成一个森林,在选一个点之前必须把其子树全部选完。同时每个点用颜色表示这个点应该先手还是后手选择,先手白点后手黑点。那么现在问题就是,对于给定的一个森林,能否按照拓扑序交替选择黑白点选完所有点。
注意到,白点黑点数量相同,且最后一个点选取的点一定是黑点。那么也就是说,至少有一棵树的根为黑点。于是我们有一个贪心:
- 先手任意选一个叶子;
- 后手优先选一个非根的叶子,若没有非根叶子则选取一个根。
可以证明上述过程一定可以将所有点选完。具体考虑:
- 由于一定存在一棵树的根为黑点,那么考虑如果所有叶子都是黑点,那么每个白点一定有一个儿子为黑点,说明白点数一定小于黑点数,而存在一个黑根不与一个白点对应,说明黑点一定大于白点,与黑白点数量相同矛盾;
- 后手选择的时候,黑点数等于白点数加一,可以用类似的方法证明一定存在一个黑叶子,且不可能仅有一个叶子为最后一个黑根。
于是直接做即可。
2023.10 完结 🎉
Happy Halloween!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架