杂题
P1758 [NOI2009] 管道取珠
考虑平方的组合意义,实际上就是求满足生成序列一样的两种操作方案 A,B 形成的有序对
那么我们直接设
P5307 [COCI 2018/2019 #6] Mobitel
如果直接设
考虑整除分块的结论,即
1002【模拟赛 #4】
模拟赛 T1
一种“双序列二分”技巧:
对于当前的
这样子每次可以排除掉
模拟赛 T2 a.k.a CF1672D
因为染色时间是比较重要的,而又是树形 dp 题,所以染色时间是 dp 状态中的一个重要组成。
每个节点存储四种状态:在父亲边之前被染色,在父亲边被染色,在父亲边之后被染色,不被染色。
模拟赛 T3
神秘结论题
模拟赛 T4
数据结构维护 dp,一种类似扫描线的东西。
1003【模拟赛 #5】
模拟赛 T1 a.k.a. P12572 [UOI 2023] An Array and Addition Again
先将每个 pos 设置为 1,再将有需要的 pos 设置为 2,最后模拟从后往前加加加,类似于二进制凑一个数的过程。
模拟赛 T2 a.k.a P11340 [COI 2019] TENIS
按照吃人的关系建边,发现只有缩点后的 DAG 中的头部 SCC 才能吃掉所有人。
对应到序列上,其实就是第一个
考虑求这个
怎么维护它们呢:
设
我们不妨维护一个序列表示
然后就可以做了,使用线段树维护,查询时使用线段树二分即可。
模拟赛 T3 a.k.a. CF2063F2 Counting Is Not Fun (Hard Version)
感觉和 T2 比,这道更简单一点?
考虑外层有一个括号之后,内层加一个括号,其实就是把外层序列的贡献减掉,再加上内层贡献,最后加上外层的加完之后剩下的贡献。
可以简单维护啊。但是还有内层括号,外层再套一个的过程呢?
这个就不好维护了。不过我们可以考虑时光逆流,从后往前考虑,加括号变成了删括号。此时就只涉及某括号内的贡献以及包含它的括号的贡献。
这个可以直接维护,先预处理出每个括号的最小的包含它的括号,然后删除的时候用个并查集之类的东西维护一下就行。
模拟赛 T4 a.k.a. P12573 [UOI 2023] An Array and XOR
待补。
1006【模拟赛 #6】
模拟赛 T1 a.k.a. P8048 [COCI 2015/2016 #4] ENDOR
把“撞在一起之后反弹并改变权值”改成“撞在一起之后改变权值但不反弹”,问题就变得简单了。
那么,颜色不变点的贡献容易计算。变的点在不同不变点中会形成若干个段,这些段只有 40 种本质不同的贡献,因此可以直接维护。
模拟赛 T2
我想起来去年多校联测写过一道 key observation 一模一样的题,当时场切了还高兴了一阵子。
考虑最终序列能被生成的充要条件是,将其相同值连续段压缩成一个一个值后,为原来序列的子序列。
而且这个压缩连续段之后,相邻不相同,对解决“不能有
首先考虑求出原序列的子序列:设
由于求出的子序列邻项互异,所以一种子序列生成的最终序列个数只和它的长度有关。
然后对于每个长度为
模拟赛 T3
关于一个子串的出现次数,其实就是两边的出现次数加起来,再加上一个合并之后新的出现次数。
所以我们只要维护头尾
先将序列长度扩展到
于是可以使用矩阵乘法优化转移。至于两种特定前后缀拼接的方案,这个是可以先 KMP 一下,然后就可以丢到转移矩阵里当系数了。
模拟赛 T4 a.k.a. UOJ421 前半部分
待补。