题解:AT_abc221_g [ABC221G] Jumping sequence

Expert_Dream

2024-03-22 16:44:52

Solution

这是我第一道正经的黑题,鼓掌! 这道题精妙在于将整个图旋转 $45$ 度,虽然可能要画图,但我感觉不用画图也是可以理解的了。 为什么要旋转 $45$ 度呢? 我们先把所有种类的操作的偏移量列出来。 - $L(-d_i,0)$ - $R(d_i,0)$ - $U(0,d_i$ - $D(0,-d_i)$ 发现有三种可能的值,有点难搞,怎么办?如果将图旋转了一下,会发生什么呢? - $L(-d_i,-d_i)$ - $R(d_i,d_i)$ - $U(-d_i,d_i)$ - $D(d_i,-d_i)$ 这样,只有了 $d_i$ 和 $-d_i$。 依然不太好搞。然后,我们可以将最终答案的横纵坐标减去 $\sum_{i=1}^n d_i$。这样,每一次的操作就变成了: 也就是说,每一次的操作横纵坐标都加上 $d_i$。 - $L(0,0)$ - $R(2\times d_i,2\times d_i)$ - $U(0,2 \times d_i)$ - $D(2\times d_i,0)$ 这样,我们发现了横纵坐标是不会互相依赖的,都是独立的,我们可以对他们进行单独计算,最后拼起来即可。 如何计算能否拼成功呢?那么我们就用到可行性背包问题。 到最后,我们从后往前记录路径就可以了。 [link](https://atcoder.jp/contests/abc221/submissions/51451629)。