2022.07.05 NOI模拟赛总结
(久违的下午场)
1.时间安排
13:00~13:20 看题面
T1:数据结构题,给定序列表示这个位置上的数为2的这么多次幂,求相加和为2的整次幂的区间个数。感觉很典的样子,有40+分可做。
T2:数论题,n次n个组合数求和,不是特别擅长,有30分 \(n^2\) 暴力。
T3:看不出是什么,而且求一般图的最大匹配似乎很难,可能能写出来25分的暴力。
13:20~14:00
先开T1,写了41分的 \(n^2log\) 做法,看时限2s就懒得卡常了。
然后发现 \(a[i]\leq 30\) 直接用桶统计做扫描线就好了,再拿25分。
对剩下的正解分没什么想法,先看后面的题。
14:00~14:40
先打T2了 \(n^2\) 暴力,本地并不能跑过40分,想加一些剪枝但是总会被特殊数据卡掉,觉得出题人应该很严谨就放掉了剪枝的想法(埋下伏笔)。
试着推式子,发现总是把题目式子推成其他形态后又回到起点,先看T3。
14:40~15:30
写T3的暴力。
枚举排列已经有了 \(9!\) 的复杂度(n=9),而求一般图最大权匹配我只会 \(9*7*5*3*1\) 的做法,什么带花树没学过而且复杂度是 \(9^3\) 也不一定能跑过,只好先打了个暴力。
细节写挂很多次,调了半个小时左右终于调出来了,手构数据没问题……
然后n=9根本跑不动。
突然想到无论序列的值时多少,离散化后和1到n的排列是等价的,那么只需要关心每个数会被算入答案多少次即可。
打了个表出来,特判n=9,调试没问题。
15:30~16:30
试着把T2往多项式上面推,发现复杂度甚至变成了 \(n^2log\),寄。
回头看T1,测了组 \(n^2\) 的极限数据,T了,瞬间慌了。
冷静分析指针移动次数确实 \(n^2\),发现问题在于set的log,可以用离散化去掉log,而且可以合并出来的不同的值的个数不会超过 \(nlogn\) 个,空间没问题。
光速写完对拍没问题。
16:30~17:00
实在想不出来分,试着类似n=9的特判给T3打了个表,然后成功找到规律,AC。(运气选手石锤)
17:00~17:50
摆烂时刻,T1和T2都想不出来更多的分了。
result:
T1:66 T2:30 T3:100
(rk1好耶,不过J神挂分了,J神TQL)
2.总结
T1:
数据结构妙题。
一个显然的结论:一段区间合并出来的数不会超过最大值+log(区间长度),固定区间后直接枚举复杂度正确,问题来到了怎么固定区间。
显然分治,每次找到当前分治区间的最大点,分左右两段,每次把长的存入hash表,暴力从短的那段中找对应的端点数量即可。
容易发现分治区间总长度是低于 \(nlogn\) 的,每次查找是 \(log\),忽略hash的常数整体复杂度是 \(O(nlog^2)\)。
一个细节(T了很多发才意识到,感谢zyz学长的hack数据):不能直接暴力重构hash表,复杂度会退化到 \(n^2\)。
正确处理方式为先递归短的段,清空hash表后递归长的段,然后不要清空,直接利用即可。
容易发现总重构长度为 \(O(nlogn)\),复杂度正确。
T2:
多项式题,还没看懂。
不过 \(n^2\)+剪枝跑过了一堆40分的,离谱。
upd:%Poly神J,J神的题解。
T3:
证明挺复杂,还没完全明白。

浙公网安备 33010602011771号