Solution Set #11
177 qoj7607. The Doubling Game 2
首先可以发现对于一个局面,操作到这个局面的方案是唯一的(考虑一条边左右的棋子数量,可以知道这条边的移动方向,删去所有不移动的边之后,每个联通块只有一个点有棋子,而对于只有根有棋子的局面构造显然唯一)
据此可以
考虑优化。这类问题的 DP 优化通常考虑把转移数压到每个点的轻子树大小。此题有如下构造:把子树从大到小排序,那么在转移一个点前,状态的范围是它前面子树大小的
https://qoj.ac/submission/331806
178 qoj1197. Draw in Straight Lines
设置变量
- 水平方向的黑色贡献:
,其余情况对称。 - 修正黑色格子的贡献:
。 - 修正白色格子的贡献:
。
贡献形式可以用最小割刻画。
179 2024.2.19 考试 T3(部分分)
先考虑
然后
180 qoj7106. Infinite Parenthesis Sequence
考虑另一个问题:设
分情况讨论这个东西的转移:
,如果这个括号后面是一个右括号。 ,如果这个括号后面是一个左括号。
写成较为数学的形式就是
设
181 qoj8179. 2D Parentheses
考虑贪心。所有点按照
所以只需要判断这个唯一的匹配方式是否满足条件。矩形包含或不交可以转化成矩形的边界没有交点,扫描线+set 维护即可。
182 qoj8213. Graffiti
考虑 ABC 串的做法,其它做法是类似的。直接 DP 是三方的。考虑一个构造:黑白染色,将所有白色都染上 B,剩下的黑色部分存在染色方案,使得对于每个 B,其相邻的结点总有一半是 A,一半是 C,这取到了答案的上界。所以 DP 的时候只需要记录相邻的点中 A/C 的点的数量即可。注意到 DP 是凸的,所以维护差分数组就可以了,复杂度
183 loj4087. 「USACO 2024.1 Platinum」Merging Cells
可以想象两个数之间有一个隔板,操作相当于随机一个删除隔板的顺序。
容易想到
注意到 DP 起点唯一而终点不同,可以设计出新的状态:
提交记录 #2009150 - LibreOJ (loj.ac)
上面几个题都好笨蛋啊。
184 2024.2.20 模拟赛 T2 count
枚举前缀最小值的值
设
然后随便推推式子就可以了。
185 loj3818. 「CEOI2022」Parking
建图,底下的颜色向上面的颜色连边。按照联通块的形态决定优先还原哪些联通块,具体地:
- 一条链,链的一端点没有出边。可以直接解决链的端点,然后删去。
- 一条链,链的两端点都有出边。找到其中一个端点,顺着出边一直走直到没有出边。此时当前两个点都在顶端,将两个点放在同一个空位置上,然后把原链拆成两条链。
- 一个环,按照没有出边的点的个数从小到达排序还原。选择环上其中一个有入边的点,将其中一个点放进空位置,拆成一条链。
容易发现操作次数的一个下界是没有匹配的车的数量加上两个车都在顶端的车的数量,而上述构造达到了上界,所以是最优的。
提交记录 #2009413 - LibreOJ (loj.ac)
186 loj3482. 「USACO 2021.2 Platinum」Minimizing Edges
转化一下问题:假设
与 有连边。 与 和 有连边。
把所有点按照
- 如果
存在:- 优先把前面的边补上一条后面的边使得第二种情况达成。
- 如果
存在,将剩下的点达成第一种情况;否则,达成第二种情况。
- 如果不存在:全连
。
需要注意的细节:
时不需要往前面连边。 时,往后的点就是它本身,所以一条向后的边可以贡献到两个点上。
提交记录 #2009647 - LibreOJ (loj.ac)
187 qoj151. Nice Lines / 【PR 1】直线
考虑在
一个做法是分治,假设我们要求
尝试令每次分治的区间内都有至少一个点。将序列分成若干块,第
Submission #334265 - QOJ.ac 但是基本是抄的 hos_lyric 代码(
188 loj3464. 「WC2021」斐波那契
需要解:
如果
令
设除之后是
接下来考虑除掉
所以我们把
大概是在预处理的时候枚举和
提交记录 #2010611 - LibreOJ (loj.ac)
189 【PR 1】守卫
首先可以发现,只有 MST 上的边是有用的。
考虑费用流,建立如下模型:
- 每个边向它的两个点连边,表示给边定向,即指定生成树上一个点为另一个点父亲。
- 每个守卫的集合向它连边,表示指定为根。
直接跑费用流即可。
注意守卫不能重合。
Submission #334215 - Public Judge (pjudge.ac)
190 qoj5423. Perfect Matching
相当于找到一个图的线图的完美匹配。
考虑如下构造:建立 DFS 树,自下而上构造,每次加入一个点除了其父亲边的所有边。如果边的数量为奇数,则把父亲边也加入,并在之后的构造中删除这条边。
这样可以构造出所有联通块边数为偶数的情况,若不能构造显然无解。
191 qoj6308. Magic
转化一下题意:有
有个有意思的三方区间 DP 做法:枚举第一个贡献到答案的隔板,那么跨过这个隔板的区间都会被删掉,这样就可以分成两个子问题。
推一下结论:
猜测这是最后隔板集合合法的必要条件,构造证明:每次取出所有不被其它区间包含的区间,取最左边或者最右边的隔板,这个隔板不会被任何区间限制。那么操作这个区间,然后继续做。
现在需要高效求一个二分图最大独立集问题。使用 bitset 优化匈牙利,复杂度
192 loj3490. 「JOISC 2021 Day2」逃跑路线
问题的关键在于求出一天以内
可以发现
一种算法是利用 187 的做法分治寻找断点,需要做
可以发现
以所有
提交记录 #2011625 - LibreOJ (loj.ac)
193 MO 题
MO 老哥给的有趣构造题,但是他没有告诉我们答案。我们机房给出了
upd:好像答案是
构造如下:
- 前
个集合 , 为全体二进制第 位为 的数的集合。 - 第
个集合 ,表示全体 的数的集合。 - 第
个集合 ,令 表示 中二进制第 为 的数构成的集合,则 。
解释一下,前
后
194 qoj8240. Card Game
一个方便的求单组询问的方法是:定义
分块已经可以做到
https://qoj.ac/submission/336017
195 uoj839. 龙门题字
首先把初始的
考虑所有满足
- 如果
,那么把 删去。 - 否则,将
的前缀替换成 ,称其为将 染色。
这样所有
直接暴力模拟可以得到一个
https://uoj.ac/submission/679817
196 uoj840 龙门考古
因为想题的时候很混乱所以下面比较意识流。
考虑怎么根据残缺的
在值域上 DP,设
注意到每次转移只需要修改单点(
提交记录 #679901 - Universal Online Judge (uoj.ac)
197 【PR 12】并查集
考虑怎么算贡献。合并
做 exchange argument,如果两个联通块的大小都大于
写一下贡献可以发现这玩意就是 Monster Hunter 模型。枚举根大力做就可以了,复杂度
Submission #338005 - Public Judge (pjudge.ac)
198【PR 2】史莱姆
可以莫队线段树判断做到根号。
考虑利用均摊优化。二分后设最开始的值是
利用
我酱汁了,不会 RMQ,于是写了神秘维护次小值的单调栈+并查集做法。
Submission #339405 - Public Judge (pjudge.ac)
199【PR 2】背包
暴力 DP,设
如果
这样状态数就是
Submission #339594 - Public Judge (pjudge.ac)
200 loj3538. 「JOI Open 2018」冒泡排序 2
200!
结论是操作轮数是
只有后缀最小值是有用的,所以只要考虑后缀最小值的逆序对数怎么求。
你注意到后缀最小值后面没有比它小的数,所以前面比它小的数就是全局比它小的数,我们每次要求出
直接丢到权值线段树上维护。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】