11.4 小计
演唱会戒断反应啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
CF27E
拆式子。直接贪心是假的。
注意到范围不大,直接把素数前面几个拿出来暴搜即可。
CF1060E
题目本质是把点对直接的距离除 2 上取整。
统计每个点作为 LCA 的荅案。
记录 \(dep\bmod 2\) 的桶,然后推一下式子即可。
Paimon's Tree
枚举直径端点,每次 3 次方区间 dp。
考虑树上区间 dp。每次记录选在/不在直径上的点,并且当前端点有无被选。稍微注意一下转移顺序。
端点有无被选主要是解决那些不在直径上的点,又在当前端点前面的情况,我们需要知道直径上这条边和其他边选的顺序。用 pyt 的话说就是费用延迟计算。钦定下一个转移点。
CF1819D
记得明天补!
迷宫守卫
你也一样!
AT_agc002_e
博弈论的题还可以这么做。
考虑变成走网格问题,改为网格图博弈。
将 a 大排序,题目转化成从 \((1,1)\) 每次双方轮流向上向左走一步。超出边界者胜。
注意你的下一步是对手选的
类似 sg 函数,知道一个点左和右如果有一个必败则必胜,如果都是必胜则必败。
然后推一下就可以知道一条对角线上胜负一样,找到最边缘的那个点,直接看上和右的决策即可。
没搞懂,明天补!!!
upd:在最后一步的时候是必败态,因为下一步就超出了,而拿完者输。所以超出边界就是胜。
当前的胜负是由可以转移到的点的胜负决定的,选择权在于自己,所以到达状态有一个必败这里就必胜,全是必胜这里就必败。
P9347 似曾相识燕归来
做了我一下午,拼尽全力不可战胜。
Observation 1:如果 \(p_1=1\),则后面最多可以用 \(n-2\) 步复原。
Obs 2:如果 \(p_1=3\),则可以先一次操作使得 \(1\) 后面有 \(2\),再操作一次 \((1,pos_1,pos_2)\) 即可使 \(p_1=1\)。
所以我们的重点就是讨论 \(p_1=2\) 的情况,看代码即可。
还要证明 Ob 1 的转化是一种最优的策略。不证了。
P11230
很容易想到轮数平方的 dp,以及 dp 记录上一个转移点,若存在 2 个以上则这一轮一定可以转移。
瓶颈在于单次转移需要优化时间,容易发现要枚举的上一个值 \(x\) 一定出现在当前序列中,且转移到的 \(y\) 满足 \(pos_y-pos_x< k\)。所以我们完全不需要枚举上一个状态,因为他就存在于当前序列中。我们只需要记录存不存在一种这样的东西即可。用一个指针优化一下,看当前序列中当前位置能否进行转移即可。复杂度轮数线性。