2022.05.17NOI模拟赛总结
1.时间安排
7:00~7:30 看题面
T1:题意好复杂,应该是DP题,但是数据范围很小,可能比较毒瘤,暴力不是很好写。
T2:有50分的暴力,加入一个数再删除可能是线段树分治这类的,要求gcd可能要莫反。
T3:有30分暴力,还有15分的特殊性质很好写,数据范围只有15应该是状压DP。
T4:只有10分的全排列枚举,要求的东西还是最大值,感觉应该是数据结构维护DP,可能非常难做,有20分的链可以试试写一下。
7:30~8:30
把后三题的暴力写了,然后写了T3的15分特殊性质,拍了没问题。对于T4链的数据实在没什么想法。
8:30~9:30
自认为A的取值只能是给出的数字之中的,就直接枚举A暴力模拟,算时间复杂度是 \(O(n^2mlogn)\),能卡过去,写了后样例能过,造了极限数据跑了2s左右,感觉问题不大。
9:30~11:00
一开始写的线段树分治,但是求一个数加入集合能产生多少互质对不好维护。一开始想用log时间解决(1e5能跑动 \(O(nlog^2n)\) ),但是没什么思路。
后来试着莫反一下,要求的东西是 \(\sum_{i=1}^n [gcd(i, x)==1] cnt[i]\) ,莫反一下变成了 \(\sum_{d=1}^{n} \mu(d) \sum_{d|i}^{n} [d|x]cnt[i]\)。
最后就变成了 \(\sum_{d|x} \mu(d) \sum_{d|i}^n cnt[i]\)
一个数的因数最多是 \(O(\sqrt n)\) 级别的,所以直接枚举是 \(O(\sqrt n)*O(\sqrt n)=O(n)\)。
但是如果提前处理好后面的cnt,做一个 "因数后缀和",就做到修查均为 \(O(\sqrt n)\)了。
一开始觉得复杂度是错的,是 \(O(n\sqrt nlogn)\) ,后来一分析,而线段树分治是均摊的,复杂度正确。
后来写的时候,发现根本不需要线段树分治,只需要先把这个数先剔除掉在减去贡献就好了。
写完和暴力对拍没问题。
11:00~11:30
思考T3 n=10的部分分,一开始想着沿用特殊性质的做法把所有合法路径(最多\(2^{10}\)=1024条路径)拉出来容斥,以为复杂度是 \(O(2^{2n})\) 的,后来一分析是 \(O(2^{2^{n}})\) 的,寄。
然后想试着转化成一个点是否能合法的概率,最后乘总方案数,但是没法排除重复的方案。
11:30~12:00
吃饭
12:00~12:30
吃饭的时候突然发现T1的做法假了,整体的斜率不一定是连续均匀变化的,光速冲回去机房想写个暴力,但是无从下手(枚举A是\(O(|V|=1e9)\)的),不知道该怎么优化。
后来写了一些不等式计算什么时候做法会错,发现条件比较苛刻,不容易构造,而且这题没子任务,就听天由命了。
result:
T1:60 T2:100 T3:45 T4:10
(待upd)

浙公网安备 33010602011771号