复盘
多测不清空,爆零两行泪 ——szq
开局拿到题就是熟面孔,啊,写博客,虽然说我还没有切这道题,但是大概思路是了解的,于是按照以往的思路,我先将这道题闲置,先去写完下面的题的暴力分
接下来向下看,基本上看的我是一愣一愣的,于是抓了一个较简单的T3先看,T3最开始没能正确理解题意,花了一段时间去理解,完全看懂后第一想法是看到序列上求不同元素个数,想到莫队,但是因为需要至少修改一个元素,还需要加上修改的代价,这样莫队显然不好处理,于是放弃了这个想法,随后决定直接写个暴力,就是记录每个元素是否出现过,使用map离散化,然后对于每个位置的元素枚举要修改的值,这样的算法是
O
(
N
3
l
o
g
N
)
O(N^3 logN)
O(N3logN)的,显然很难卡过去,但是因为没能想出更好的做法,于是就接着看了,顺便一提,这样写实现不算简单,所以实现花了我很长时间,大概到这里时已经过去了1.5h
接下来去看的T4,T4可以说相当难,于是想了一会没想出来就放弃了
回头看T2,看题面没什么思路,于是决定从数据范围入手,前30分数据相当小,10以内的数据可以说绝大多数的算法都能通过,并且动物只有三只,于是我想到最大情况数只有310 种,那么我们可以通过平行地模拟每种情况的过程得出每种情况的存活状态,这样时间复杂度就是
O
(
n
m
∗
3
n
)
O(nm*3^n)
O(nm∗3n),对于30分的数据显然是可以过的
这样我基本就完成了我能够完成的暴力分数大概3h时完成了这部分
回去看T1,因为有了先入为主的单调队列优化思想,这题的思路就很清晰了:KMP求以i为结尾的不包括任何匹配串的最长区间→DP+单调队列优化
接下来就是实现了,好在此题的KMP和单调队列实现并不复杂,所以并没有多耗我很多时间,大概40min结束
还剩下一点时间我用来看T4了,但最后也没研究出来,于是便无果而终了
期望成绩
100+30+15+0=145
实际成绩
30+30+0+0=60
赛后总结
这次模拟挂了相当多的分数,主要是T1出现的问题
T1为什么挂了呢,原因就出在宋队曾经说过的一句话上(见复盘)
我的方法是求m次KMP并每次求完后都使用单调队列优化DP计算结果,但是每次DP并不一定要从中间开始,有可能强制从1开始,这和后面n+1是一个道理
T3map常数过大
而这次最大的败笔是写完T1后剩下的时间去看了不可做的T4,如果将这段时间用于T1,也许就不会出这个问题了
总的来说就是如果写完之后剩的时间不多了,除非你有100%的把握切题,不然就不要再看其它题了,要好好检查