IOI2020国家集训队作业 做题记录

约定

  • 【码】:标记为该题码量大,考验码力。
  • 【S】:字符串题。
  • 【D】:数据结构题。

IOI2020国家集训队作业 Part 1

  1. CF504E Misha and LCP on Tree【码】【S】:
    tags:哈希,二分。
    序列上的套路拉到树上。运用哈希的可加减乘除性,可以二分 LCP 长度。
    放到树上一样,维护每个点到根的正向和逆向的哈希值,询问时二分 LCP 长度,从起点开始跳长度,跳到当前 LCP 结尾,计算哈希。为了每次 O(1) 求 LCP 结尾,需要长链剖分预处理还有使用 O(1) LCA。理论上 CF 的应该使用双哈希,但是双哈希常数太大。
    8 秒,但我的常数的确挺大。My Submission.

  2. CF505E Mr. Kitayuta vs. Bamboos
    tags:二分,堆。
    小清新二分答案题。这就是 CF *2900 吗。
    看到问法思考二分做法,发现正着推考虑不是不可,但是高度不为负导致了挺多限制。考虑优化 check 做法。
    然后正难则反,考虑时间倒流,限制变为:初始高度 mid,每天降低 a[i],过程中高度不能小于 0,每天可以拔高 p 高度 k 次,最终高度大于等于 h[i]。因为高度不同优先级不同所以使用堆维护。然后我写了一个做法:每次从堆里面取高度最小的出来,若无法减去 a[i],则拔高它。显然假掉就不说了,这本质实际上回到了贪心做法,可能造成若干个堆到一天的局面。所以我们一天一天判,每天(k 次机会全用显然最优)取队头 k 次,拔高,看是否能够满足限制,不能再放回去。这样就不是贪心,可过了,复杂度 O((n+mk)lognlog(maxi[1,n]hi+m×a[i]))
    2 秒,436ms。My Submission.

  3. CF566C Logistical Questions
    tags:点分治,数学。
    很清新的一道树上数学题。不得不说挺偏的而且做过基本这类套路都看得出来了
    考虑答案重心具有什么性质:从重心开始不论往哪个方向走,路径和必然更大。所以考虑每次往某个点走是否更优。但若每一次对所有儿子计算一遍路径和是 O(n^2) 的,考虑求导优化式子。求导后即可 O(n) 计算每一次往哪个点最优。注意求导时是复合函数一次套幂函数,所以加要变减。但直接跑仍然是 O(n^2) 的,所以使用点分治优化,最终 O(n log n)。
    2 秒,我跑了 529ms。My Submission.

  4. CF603E Pastoral Oddities【D】:
    tags:整体二分,线段树分治,LCT。
    算是经典加边题型了。
    手玩推出度数全奇的等价条件:图中仅偶数个点。充分显然,必要易构造。看到问法:最小化最大边权。显然 Kruskal 排序,静态做法显然。考虑动态加边(这时候可直接上 LCT),发现答案单调。由答案单调可发现:一条边的“有用”时间段是固定的;可整体二分。对于第一个结论,我们可以找到每条边“有用”的时间段然后线段树分治;对于第二个,直接可撤销并查集维护整体二分。
    所以共三解:LCT、线段树分治、整体二分。后者复杂度 O(m log m log n)。
    4 秒,跑了 483 ms。My Submission.

posted @   pldzy  阅读(62)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示