NOIP游记
赛时
还是一样先把四题题面都看了一下,感觉比去年确实要难不少(起码第一题绝不是签到了)。
第一印象觉得 T4 比 T3 可做。
先看 T1:
感觉是贪心,但是不知道咋贪。
想了一下发现其实当前这一位只要能匹配直接匹配掉就可以了,不用考虑给后面留一些数字(反正贡献是一样的)。
所以只需要用 \(4\) 个变量维护一下当前可用的数字即可。
代码放在 T1 还是有点长的。
差不多 \(45\) 分钟过了大样例,因为是一遍过,还是有点担心大样例的强度的。
然后直接看 T2:
很明显每一段可以连起来算(因为我觉得 T2 不会是矩阵快速幂)。
然后觉得要么是容斥要么是 dp。
先尝试 dp。
列了几个状态都感觉好难写。
再考虑容斥。
突然发现不合法情况一定出现在相邻的两个数,也就是说如果每一段都是合法的那就一定是合法的。
那就简单乘法原理记一下数就可以了。(考场脑子抽了,打了一个类似于容斥转dp的东西,但本质相同)。
现在差不多一个半小时过去了,感觉速度还算可以。
稍微检查了一下。
看 T3:
题意就是问你从给出的几个起点开始 dfs 能弄出多少个不同的搜索树。
感觉暴力都不会,于是果断跳过去看 T4。
T4 的 \(O(n^2 \log n)\) 暴力有 \(20\) 分。
然后可以倍增预处理就有 \(r-l+1=k\) 的 \(12\) 分了。
先把这两个打了。
之后去想链的情况怎么做,把答案化表示出来差不多是 \(\min(\max_(...))\),感觉很可以二分,但是 check 貌似是 \(O(n)\) 的。
然后考虑整体二分,想了一下发现可以用线段树优化找最大非零连续段的过程(类似于最大子段和)。
但是感觉很难写。
还剩 \(2\) 个小时,权衡了一下决定先再想一下 T3。
感觉两个特殊性质还是很可做的,也不难写,其他就真的不会了。
于是果断开始打 T4 链的 \(32\) 分。
写的过程还是很顺利的,虽然确实难写,细节也很多(比如整体二分的递归顺序)。
差不多还剩 \(1\) 个小时 \(15\) 分左右的时间写完了,\(O(n \log^2 n)\)。
测一下大样例发信跑的飞快,感觉不对劲,仔细观察了下大样例发现他既然同时满足 \(r-l+1=k\)。
我真的服了,还得自己造数据。
自己捏了个 \(n=1e5\) 发现速度还算可以 \(3s\) 左右出结果,加上 O2 应该稳过。
但是测 \(n=5e5\) 就出问题了,跑了 \(22s\) 而且一点可以优化的地方都没有。
当时心态有点小崩,并且我不会常数更小的一起二分算法。
还剩 \(45\) 分钟,去打 T3 特殊性质。
菊花图的代码始终调不对,最后发现是题目有个地方理解错了。
调完 \(16\) 分还剩 \(10\) 分钟。
尝试打 \(n<=5\) 的暴力,结果根本写不完,只能收手了。
预估分数:\(100 + 100 + 16 + [48,64] = [264,280]\)。
(update:真实分数:264)。
总结
在这三个月的停课时间内,接触了许多新的算法和专题,也比了很多的模拟赛。
基本上都订正完了,可能唯一不足的就是有一些模拟赛没把部分分打完整。
需要改进的地方:
- 磨练心态:考场上其实发现 T3 不会做之后心态就开始动摇了,思路也变得比较混乱,如果当时保持冷静的话没准能想出 T3 更多的部分分。
- 提升思维能力:代码能力目前已经算可以了(感觉 T4 整体二分加线段树一遍过真的很不容易),主要就在于思维上,T3 的 \(k=1\) 的做法如果能猜一猜是可能猜出来的,但是考场上就是一点思路都没有,以后碰到不会做的题目应该大胆一点去猜结论,当然猜结论的能力主要还是取决于思维能力。
- 拓宽知识面:像今年 T4 虽然整体二分不在大纲中,但是如果会的话链的情况就比较简单了。