AtCoder Grand Contest 002 - AtCoder.
EF 赛时不会,E Nekopedia 给我讲了,F 看了题解。
2025.1.18 打比赛、补题、写题解。
A
随便分讨一下。有一种是看 \((b-a+1)\) 的奇偶性。
可以按 \(a<0,a=0,a>0\) 来先对 \(a\) 分类,再分讨对应的 \(b\)。
总结:注意思路清晰点,分讨要有条理,不要怕麻烦。
B
需要注意的就是已经可能有红球的盒子里面的球被拿完后又会变得没有红球。
所以注意要按时间来,记的东西要带时效性,不能直接建图跑 \(1\) 能到多少点什么的。
对每个盒子记当前是否可能有红球和当前球的个数,进行操作即可。
总结:手玩样例;记的东西带时效性。
C
注意到合法的拆分,拆到最后一定只剩下两个相邻的(原先也相邻),它们的和 \(\geq L\)。那么我们直接把这俩留到最后,其他的左边从左往右一个个拆,右边的从右往左一个个拆即可。于是找相邻且加起来 \(\geq L\) 的两个,找到了就按上述策略搞,容易验证存在这样的一对是有解的充要条件(必要性显然;充分性是因为有这个策略),于是如果没找到就是无解。
总结:这种区间 DP 状物但数据范围很大的情况,可以考虑发掘一下特殊性质;证……是有解的充要条件(充分:构造(可以是构造出策略))来判有无解。
D
一眼 Kruskal 重构树(按边),二分 + 树上倍增即可。
似乎还有 整体二分 + 可持久化并查集 做法。(???)(不知道记错没有)
似乎还有单 \(\log\) 做法。(不知道和上一行是不是一个。)
总结:熟悉 Kruskal 重构树的性质和它与其他东西(比如 问题 或 笛卡尔树(?)或 )的关联;按某种顺序维护连通性且在线(Kruskal 重构树);二分简化问题;树上倍增(相比二分,这样上树倍增更合适),Kruskal 重构树上倍增;维护连通性也可以考虑并查集。
E
博弈论好题(个人认为)。
我们把数组从大到小排序,堆馒头堆起来(变成一堆格子),那么两个操作:
- 删掉最大值:把最左边那列删掉。
- 全部 \(-1\):把最底下那行删掉。
于是可以进一步转化为在这个格子图上走(左下角是起点):
此处原本有一张图。
(直接画图看以每个格子为起点是先手必败还是先手必胜,找规律。)
大力分讨。实现得比较丑陋。
总结:博弈论,分析博弈过程,转化到图像上,画图,找规律,小心细节(包括小心边角情况),情况考虑完整。
F
感觉是有点牛的 DP。
关注最终的样子。
把颜色为 \(0\) 的球叫做白球。我们不关心白球是哪个颜色变过来的。发现限制是任意前缀(从前往后放就是时刻)白球的个数 \(\geq\) 其他颜色球的颜色数。
于是我们直接把 白球的个数 和 其他颜色球的个数 设成 DP 状态的两维,转移就是枚举放白球还是放其他颜色的球。放其他颜色的球是一放就把这种颜色的放完。注意两个点:
- 记颜色数并没有记是哪些颜色,所以放不是白球的球时要枚举放的颜色是哪种。
- 放非白色球的时候第一颗球一定是紧跟着放后面(这样才在 DP 的过程中体现颜色的有序(放置顺序)),而后面的这种颜色的球用组合数来写。
- \(k=1\) 时全是白球,这一步就会出问题。于是 \(k=1\) 直接在开始时特判掉即可。
总结:从最终形态入手;把关键限制设进 DP 状态;不一定要一位位放,可以把同类元素一起放;将顺序融入 DP 中(要注意细节(?));小心处理中会出问题的特殊情况,特殊处理;调用预处理函数。
标签:总结,AtCoder,颜色,Contest,Kruskal,002,白球,DP From: https://www.cnblogs.com/huangkxQwQ/p/18681890