题解:CF2267D Backrooms Hill

· · 题解

关键性质:只有位置的奇偶性相同才能交换。

并且注意到 1\le a_i \le n,且 a_i 互不相同。

所以 a 是 1\dots n 的一个排列,此时最大值只有一个,为 n。

这样我们就好做了,原题目转化为:重新排列奇数和偶数位置上的数字,使得能找到一个 p,让 a_1<a_2<\cdots<a_{p-1},a_p=n 且 a_{p+1}>\cdots>a_n。

考虑动态规划。

先把 a 升序排列,并记录原下标(奇偶性)。

我们令 dp_{i,j} 左右两侧分别填原下标奇偶性为 i,j,能否符合原题目的条件(即能分成左侧单调递增,右侧单调递减),符合为 1,不符合为 0。

我们令 0 为偶数,1 为奇数,即奇偶性用 n\&1 代替。

初始化:dp_{1,n\&1}=1,即一个填左边,一个填右边。

考虑转移:这个转移很明显了,只有奇偶性相同的情况下,才能转移(因为数组已经排好序了嘛,所以不用看数组了)。令 c 为原下标的奇偶性,则有以下转移(令 dp2 为上一次的 dp 结果,然后把 dp 清空):

然后,就是求答案了。

我们发现,在 a 数组中,原来值等于 n 的下标和重拍后值等于 n 的下标奇偶性相同,所以答案的下标就是(令 k 为原来下标的奇偶性):dp_{k,0} 和 dp_{k,1},由于这两个值都可以,所以只要其中一个值为 1,就可以输出 YES,否则输出 NO。

赛时代码