模拟测试28
T1:虎
观察性质,贪心。
首先看到求最小次数,但是没有权值,想到可能不是DP,可能是个贪心。
看数据范围,1e6,O(n)或log,但这题没什么可用的数据结构。(现在想想log可能来自二分,但去想二分的check发现依然可以贪心。)
类似杂题1里的szn。找规律发现,取反操作,重合部分是没用的。2+1的lca以上可以去掉,2+2同样可以省去,在同一子树内部转移。
边的几种关系分类讨论一下。需要操作的只有0->1.同一子树内部一对互消,有剩下的转移到父节点向上连的边。(合并)
这样决策是不会更差的。
T2:阴阳
(话说,联系T1,莫不是......虎符咒......)
观察性质,容斥。
网格题求最值很可能是网络流。
计数题可能是DP。
有些有特殊性质可以转化为序列。
计数可以前缀和。
手模,每行都有一个黑白分界点,且有单调性。
分为四类:(白左,黑左)×(升,降)。
比较巧妙的做法是旋转矩阵90度,减小码量。
由于网格位置限制,分界点每行有范围。
处理出黑色白色在每行的左右边界即可。
转移是sigma形式,可以前缀和把n^3优化为n^2。
但是我们发现过不了样例。
再次手模,发现有的状态计算了多次。
开始只想到把竖着的算了多次,但是没想到横着的也算了多次。还有全黑全白也是。
这些可以处理出黑白的全局左右上下边界,计算出多算的情况数。
注意:全黑全白要考虑黑白有几个没出现过。
考试时卡在横着的处理上,没调出来。
方法应该是画几个例子,能看出来。
3、山洞。
60:m<=1000:n^2.
100:1e9,矩阵乘,循环节除法魔法。本题都用到。
记得去看循环矩阵。
首先60% nmDP比较好写。
其次尝试去掉m=1e9.
直接矩阵不行,因为转移不重复。但是发现以n为循环节,i%n是相同的。
发现由于是环,具体到哪里不重要,重要的是距离出发点的位置。
所以fj+k=fj*fk.(下标%n意义下)。
(其实就是个循环矩阵)
于是可以DP到n处理出循环节部分,m%n的余数可以在过程中算出来。
然后就是循环矩阵了。O(n^2log)
注意矩阵乘是+=不是=。
要去看循环矩阵