P9015 [USACO23JAN] Moo Route S 题解

思路

这是一道比较基础的构造题,检测你学得是否扎实。

性质:当且仅当 $\sum_{i=0}^{n-1} [A_i \equiv 1 \pmod 2] = n$ 满足(即为真)时有解,上式等价于判断是否每个数都是偶数。

证明:首先,不满足时无解是一定的,否则那个地方必定会走过去走不回来了,因为最后要求走回原点;有解也是必然的,因为我们可以构造出一组解:首先一遍走到最后一个能走的地方,那这个时候返回,由于都是偶数,必然可以返回,返回了一步之后,看看能不能再往右走,不能的话继续返回,继续判断……以此类推,最后必然回到原点。

所以我们可以贪心构造方案:走的一段越长越好,只要一直往右走,能走过去就说明肯定能返回,就放心走,然后返回时,先进行一遍循环,判断如果是回去了就没法再走到这的位置,那么往左退,第一次遇到不满足就跳出。这个循环完看看是否回到原点,如果是的话就证明 $A$ 数组的所有元素都是 $0$ 这个值,跳出。否则继续往左走,这次是判断如果能折回来就往左,否则跳出循环。重复执行上述操作。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, a[N];
int main(){
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
    int i = 1;
    while(1){
        for(; i <= n && a[i]; i++) a[i]--, putchar('R'); i--;
        for(; i && a[i] == 1; i--) a[i]--, putchar('L'); if(!i) break;
        for(; i && a[i] > 1; i--) a[i]--, putchar('L'); i++;
    }
    return 0;
}
posted @ 2023-02-08 20:58  徐子洋  阅读(55)  评论(0)    收藏  举报  来源