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:

证明挺复杂,还没完全明白。

posted @ 2022-07-05 21:27  Displace  阅读(107)  评论(0)    收藏  举报