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)

posted @ 2022-05-17 13:23  Displace  阅读(104)  评论(0)    收藏  举报