国庆梦熊集训做题记录
炼石计划
- T1:https://www.cnblogs.com/yanbinmu/articles/19122547
- T2:https://www.cnblogs.com/yanbinmu/articles/19122718
D3 作业
A. 关于整除分块
B. 题解:ABC192F Potion
最开始的想法遍历 k 判断可行,然后再想办法把时间求出来。
判断可行是很简单的,我们只需要满足 \(\sum_{i=1}^k a_{e_i} \equiv x \pmod k\)。
这个是好算的,我们做一个模 k 的可行性 01 背包。
然后去向如何找那个加起来的时间,发现可以将这个时间放到 dp 值里面存着,维护模 k 是 j 的最大加和就做完了。
C.Vanya and Treasure
显然的,我们按照开箱子的顺序,记录 \(f_{x, y, p}\) 表示我开某一个 p 类型的箱子后,我站在 \((x, y)\) 上。
这个的转移是我去枚举我下一个类型的箱子开哪个。
然后这个东西发现他的转移会被卡到 \(O(nm)\) 就烂掉了。
我们考虑一个经典的东西,我们看到这种曼哈顿距离可以考虑四个象限来想,分别维护四个象限的前缀最小值。
这个东西用二维前缀和维护不了,但是我们可以扫描线或者二位树状数组来做,注意初始化的手法,不要忘记抹去最开始写的一些东西。
D.ABC134F Permutation Oddness
简单说说题面,问你 \(a\) 是一个长度为 \(n\) 的排列, 问有多少个怪异值,即 \(\sum_{i=1}^{n} |i - a_i| = k\) 的 \(a\)。
对于这种绝对值形式的东西,我们可以考虑拆贡献,其中 \(i\) 或者 \(a_i\) 是较小的时,那么贡献是 -1,否则是 +1。
那么这就是将 \(i\) 与 \(a_i\) 配对。
考虑一个朴素的 DP,\(\displaystyle f_{i, x, y, k}\) 是遍历到第 i 对,前面有 x 个下标没配对,y 个值没配对,已经有 k 个贡献的方案数。
显然的,如果我确定一个值或者下标是向后或向前匹配了,那么他对怪异值的贡献就确定了。
然后我们推导转移时可以发现,如果互相指,那么都不变,而后分析,如果两个都向前或都向后,那么 x,y 均加一或减一,如果一个向前一个向后,x,y 是不变的。
这样 x 和 y 的值就是一样的,我们可以将状态砍掉一维。
转移就很好推了。
E.P9197 [JOI Open 2016] 摩天大楼 / Skyscraper
https://www.cnblogs.com/yanbinmu/articles/19124975
排列类问题
- 处理大小关系
- 从小到大或从大到小插入排列
D4 做题笔记
F. CF1670F - Jee, You See?
做这道题有点费劲,昨天虽然讲了,但是有些细节没想明白。
先是状态有点问题,导致并不是很好统计答案和初始化,后面重新设计了一下转移方式,好写了一些。
感觉就是说应该在自己写方程的同时把初始状态什么的写一下,避免出问题。
还有一个点就是说用阶乘加阶乘逆元的方式处理会 TLE,还是能用递推杨辉三角就用递推吧。
AT_abc242_f Black and White Rooks
最开始想的有点问题,计算某行某列中放一些点计算错了,后来瞄了一眼题解,然后写个小 DP 就过了。
D7
P11791 [JOI 2017 Final] 准高速电车 / Semiexpress
我停车的位置肯定是慢车太慢到不了,快车不停的位置。
我一个准高速车停车,会让这个点和后面几个点可以到达(慢车)。
考虑我处理出来这样的区间,然后就是选择一堆区间,求区间最大并。
考虑一个dp,当前区间是 \([l, r]\) 时 \(f_r = max_{j=l}^r{f_j - (j - l)} = max{f_j - j} + l\)。
但是 n 太大了。
考虑我一个东西肯定按照区间大小取,因为考虑我取了一个大的,肯定比取小的优。
那么就是如何快速算出这个区间大小。
考虑最大的区间定然是,就是一段慢车能到的点后一个,直到一个快车点结束,肯定不会到这个快车点后面,或者就是这个慢车开不到那个快车点。
P11795 [JOI 2016 Final] 铁路票价 / Train Far
想了一会,想到了最短路径生成树,也是没有读请出题导致有点想歪了。看了题解发现其实就是在一条边如果加了 1 那么就相当于断掉了他。我保留在最短路径上的点和边,然后它就是一个 DAG,然后就简单类似拓扑的操作,一个点可能有多个最短路径的来源,我记一下前驱个数,当一个点的前驱删光了,那么这个点也就不能用来更新前驱里有他的点了,就这样做就行了,复杂度 \(O(m)\)。
P11792 [JOI 2017 Final] JOIOI 王国 / Kingdom of JOIOI
先想到它的形态是在一个角上的一个部分,想到二分答案后一行一行考虑,把所有小于 minn + mid 的拿走,忘记自己二分答案了,还可以算一下把所有大于等于 maxn - mid 的全取走看看是否冲突。这其实启示我们在一些能看出明显二分答案的题时,可以考虑在想 check 时主动去构造一些可能矛盾的条件(感觉说的不是很清楚,就是说如果两个条件,我可以考虑将两个都满足,然后看是否冲突)。