题目乱做笔记 Part2
CF1824D
考虑如何快速计算
从大到小扫描
同时也可以使用颜色段均摊将区间覆盖转化成区间加,这样会难写一些,不过无需卡常。
CF1552G
首先需要发现一个结论:对于所有序列合法等价于对于所有
证明:对于所有序列,考虑将
但是现在依然只能做到
优化的思路是当我使用过第
那么考虑对操作搜索,若一个位置还没有被操作覆盖,我们设它为
「GLR-R3」清明
模拟赛题,但是我不会。
快进到正解部分。
设
我们可以将
显然我们可以考虑每个
假设我们当前考虑的
考虑加入这个式子的出现次数,出现次数自然是
写出总式:
考虑固定所有
设
发现原式等价于:将
列出生成函数:
发现这个生成函数的组合意义就是求方程
进一步的,由上式可以发现,我们不关心
于是考虑 DP 计数,继续观察,发现每个
显然这无法通过,考虑按
「GLR-R4」夏至
考虑
使用 Powerful Number 筛,具体地,考虑构造数论函数
进一步,由于
并且,
尝试写出
由于
因此直接暴搜 Powerful Number 并求值即可,
简单记录一下如何求
考虑怎么做
考虑递归计算,设
CF1381D
考虑什么地方蛇可以掉头,不难发现这个点必须有至少三条长度
不妨称这些点为关键点,那么若蛇头能走到某个关键点,必然合法,若走不到任何关键点,必然不合法。
结论:若蛇头能到达某个关键点,必然能到达所有关键点。
证明:显然。
因此我们取出任意关键点
将
设对蛇头的操作是
那答案序列便是
考虑某个连续段
CF573D
将
不过有可能匹配不了,通过画图得知与
于是直接 DP 即可,需要加上矩乘加速。
CF1558E
第一步是二分答案。
二分完之后如果没有不能走回去的限制直接维护一个
考虑加上限制怎么做。
我们自然想让每次扩展都是“没有后效性”的,也就是扩展之后能走到的点完全包含扩展之前能走到的点,如果这个成立,那每次能扩展就扩展便是正确的。
为了达成这个目的,我们可以每次扩展一个
由于保证了每个点度数
考虑如何寻找
于是直接模拟即可,时间复杂度
CF771E
首先考虑暴力 DP,设
这样显然是过不去的,考虑减少状态数。
对于任意一种方案,我们将矩形按照左端点坐标为第一关键字,行坐标为第二关键字排序。
对于某个
同时我们也发现对于
因此对于每个
时间复杂度
CF1175G
转移
考虑分治优化转移,每次考虑跨过中点的区间,分类讨论最大值在左边或是右边的情况。
分讨之后转化成动态加直线,动态维护某个位置最值,同时查询的位置是单调的,只需记录一个单调栈即可。
CF1801E
我们发现有用的合并只会发生
这是简单的,树状树组维护链上哈希值,然后二分一下即可。
CF698F
考虑
由于排列
考虑什么情况下
和 包含的质因子集合相同。- 对于两个质数
,若 ,那么可以把所有 的倍数和 的倍数整体按原顺序交换。
首先满足这两种情况一定是能够交换的充分条件,但为啥是必要的我并不知道。
假装这是对的,考虑存在
如果
接着考虑如果
因此我们直接取出
CF1299D
看到非简单回路的异或和,容易想到线性基。
注意到值域非常小,进一步,发现大小为
因此考虑将线性基记入状态中,做一个 DP。
把点
不难发现
与
与
于是直接 DP 即可,预处理一下线性基的合并结果,注意若一个元素无法加入线性基那一定非法。
CF1178G
难绷,KTT 板题。
发现这个
按 DFS 序拍平成序列后问题变成每次区间加
把绝对值消掉之后就变成 KTT 板子了。
CF1583G
我们称一个区间被“彻底点亮”当且仅当它之后不会被熄灭。
那么区间被“彻底点亮”的顺序肯定是按
假设区间已经按
那么当
设
不难发现为了从
接下来考虑统计答案,也是一样的道理,如果存在一个
CF264E
最关键的性质是
注意到题目里树每天变高等价于令当天的
同时由于
因此在添加的时候可以暴力找出这些树,然后用线段树维护一下 DP 值。
又因为
具体的,只需维护下标的线段树和值域的线段树即可。
CF1854E
很难绷的乱搞题。
从小往大加数,给每个数一个限制,表示最多加几个,这个限制在
CF533A
首先考虑如何
我们一开始将所有点到根的权值
枚举
考虑优化这个暴力,直接优化贪心的过程显然是没有前途的,考虑一步转化:原问题合法当且仅当
因此我们可以开一颗线段树,设
考虑我们增加完权值会对哪些点造成影响,不难发现某个点能影响的那个点必须满足这个点是那个点到根路径上的最小值,并且是唯一的最小值。
因此我们只需暴力修改所有需要修改的点,时间复杂度均摊
CF436F
稍微转化一下问题可以转化成区间加等差数列,求全局
CF1609G
注意到由于差分数组单调,因此最优决策是每次选小的那一边。
等价于把差分数组归并排序之后每个位置有
由于
CF461E
不清楚字符集为啥要开这么小,开成
考虑如何计算一个字符串被拼成的最小操作次数,从左往右扫一遍,如果上一个字符所在的连续段加上当前字符仍然是
那么把 SAM 建出来之后我们可以据此设计一个
这显然是过不去的,注意到对于固定的
同样的,当答案为
因此我们可以二分答案,现在问题变成计算答案为
若 SAM 上节点
给你一张有向图,满足上面有
个特殊点。
你有两个变量,和 。
你从根开始走,每经过一条边则加一,每到达一个特殊点则 加一,当 为 时过程终止。
你可以任意安排你走的路径,需要求出终止时的最小值。
设
因此暴力求出每种
CF788D
考虑询问
如果答案不是
按照这个分治下去即可。
由于一次询问至少确定一条直线,同时也不会产生很多无用区间,所以能过。
CF1776M
比较抽象的做法,我也不知道它对不对,很可能是假的,如果有 dalao 能证明或者 hack 请私信我。
首先考虑二分答案,把
猜测先后手的策略,我们把当前能选的点分成三类:
- 黑点
- 白点,并且删掉它之后会出现一个能选的黑点
- 白点,并且删掉它之后不会出现能选的黑点
首先如果存在黑点,不管是先手还是后手都一定会直接选掉。
如果不存在黑点,我们优先删去第三类点,否则再删第二类点,因为如果后手删了第二类点,会立即输掉,如果先手删了第二类点后手会立即删掉新出现的能选的黑点,相当于平白无故少了一个黑点,感觉并不是很优。
如果直接按照这个东西写,会获得 Wa on test 14,然后我用一个 pair 表示第二类点,并优先取删掉这个点后对应的那个黑点标号比较大的,然后它过了???
代码就是直接照着这个模拟,是两只
CF297E
太牛了。
可以先画出所有可能情况,一共有五种,不难发现其中两种是合法的。
对于这两种合法的情况,我们可以列出一些式子表示这些情况的限制,一般的思路是直接对着这些式子上数据结构优化。
但是这样是没有前途的,你会发现这东西根本优化不了。
这个时候需要想到容斥,我们先预处理出
然后可以进一步发现非法情况可以分成两类:一类是
CF1168D
考虑暴力怎么做,不难发现两个叶子
因此设
进一步优化是把一条链缩起来,这样每个点的深度只有
ARC173E
考虑
一个显然的必要条件是这些
但是这个条件并不是充分的,设这些异或起来的
考虑证明如果
考虑归纳证明:如果此时
现在的问题是判断能否选择全集:如果
接下来问题形如:在
可以使用线性基解决这个问题。
本文作者:Tx_Lcy
本文链接:https://www.cnblogs.com/tx-lcy/p/18228912
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步