2022.05.31NOI模拟赛总结
1.时间安排
7:30~7:50 看题面
T1:树上带限制k个点,很点分树,但n只有100,询问却有1e5很奇怪。小数据可以爆搜,链可以预处理,边长都为1应该能dp。
T2:最小化机器的数量,很网络流,但是似乎贪心匹配就可以。只有一次询问可以暴力二分,4000次询问也许也能二分。
T3:看上去似乎直接bfs+线段树合并就行,但是复杂度可能不对。有50分可以暴力bitset做。
7:50~8:30 T3
先写了基础的\(O(n^2)\)暴力,确定没理解错题意,直接上bitset。(因为数据不好造就没对拍……)
分析了一下线段树合并似乎最坏能被卡成 \(O(n^2)\) ,还是先写前面的题。
8:30~9:00 T2
写完 \(O(nm)\) check的暴力二分,样例没问题。
分析一波发现可以维护一个只增不减的指针做到 \(O(n)\) check,整体复杂度 \(O(nqlog|V|)\), 用小数据对拍正确性没问题,大数据跑的比较慢,稍微卡了卡常数,卡进0.8s。
9:00~10:30 T1
先写了爆搜10分。
一开始怕直接每次询问dp \(O(mn^2)\) 过不掉,准备先预处理查询二分,但是似乎很麻烦不好写,而且直接dp是卡不满 \(O(n^2)\) 的,就偷懒了。随机数据没问题。
思考边长都为1的话保证了最远点对距离不超过 \(n\) ,就可以把距离开成数组的一维dp。直接定根为1做树形dp,设状态 \(f[i][j][k]\) 表示以 \(i\) 为根的子树内选择了 \(j\) 个点最深深度为 \(k\) 的方案数,暴力 \(O(n^5)\) 做就好了,卡不到复杂度上界。
这种做法的瓶颈就在于需要把距离开成数组的一维,然而最大数据这个距离是1e11级别的,一时也没什么想法,只能先弃掉。
10:30~11:30
(一通分析猛如虎,一看结果0-5(指后5个点全T飞))
T3想不出来还有什么东西能代替线段树合并,而且感觉线段树合并也许卡不满,就一通乱分析,不知道是怎么得出时间复杂度小于 \(O(\sqrt m\sqrt n log n)\) 空间复杂度小于 \(O(n\sqrt n log n)\) (大概是因为只分析了等腰直角三角形式的网格图……),自我感觉良好,就直接莽线段树合并。
因为不好构数据(加上觉得自己分析的很对)直接跳过。
11:30~12:00
T2试图找一个 \(O(logn)\) check的方式,发现我需要维护动态的前缀max(?)。时间不多了,开摆。
result:
T1:60 T2:60 T3:50
(rk1好耶,不过吃了J神100多分dbqdbq5555)

浙公网安备 33010602011771号