模拟测试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)

注意矩阵乘是+=不是=。

要去看循环矩阵

posted @ 2019-08-21 21:40  seamtn  阅读(212)  评论(0编辑  收藏  举报