A.Hands
- 贪心
B.log
- 贪心换最小
C.Large RPS Tournament
- 倍增DP
D.L
- 可以在小范围内BFS然后再将终点映射到这个范围内,但是很麻烦。
- 将题意转化为三角形重心的移动,每一次可以向除了对角以外的七个方向移动,因此只需要在 m a x ( ∣ x ∣ , ∣ y ∣ ) max(|x|,|y|) max(∣x∣,∣y∣)的基础上加上需要按照对角线调整的+1贡献即可(还要判掉同一个格子内的情况)
E.1D Reversi Builder
- 发现性质,1…1,11…1000…0,以及1110…10000三种情况讨论。
- 考虑第三种情况,由于对称性,假设最左边和最右边的段是 [ 1 , l ] , [ r , n ] [1,l],[r,n] [1,l],[r,n],那么当 s − l ≠ r − s s-l\neq r-s s−l=r−s时,按照左右填的颜色不同总数都是 n n n,再考虑 s − l = r − s s-l=r-s s−l=r−s的部分加上即可。
F.1D Kingdom Builder
- 神奇的贪心,首先可以考虑最后形成了若干段,我们用贪心的方法来判定它是否可以形成:
- 注意到我们只需要考虑每一段的第一个是否可以添加,我们可以从后往前删除。
- 最后一段一定存在一个字符c,使得在某个时刻其他所有段的两端都不是字符c,那么其他段都能找到一个子串使得两端不为c,删去当前的最后一段之后,剩下的段中如果有c,那么也能直接删完。
- 删到不能删为止,最后的段一定都不为c,此时超过一段一定不行。
- 因此相当于是要求:除了第一段以外每一段内都一定要有一个c,除了最后一段以外每一段都一定要有一个子串使得两端不为c。
- 知道了上面的转化,我们可以直接DP,记录状态 f [ i ] [ 0 / 1 ] [ 0..3 ] [ 0 / 1 ] [ 0 / 1 ] f[i][0/1][0..3][0/1][0/1] f[i][0/1][0..3][0/1][0/1]表示选到 i i i,当前选了没有,选了一个非c/再选了一个c/再选了一个非c,是否确定开始终止段。