洛谷P1288 取数游戏II 题解 博弈论

题目链接:https://www.luogu.org/problem/P1288
首先,如果你的一边的边是 \(0\) ,那么你肯定走另一边。
那么你走另一边绝对不能让这条边有剩余,因为这条边有剩余的话队首再走回来并去掉所有的值那么你就输了。
因为大家都绝对聪明,所以会选择将走过的边全部取完。
那么现在就面临着一个问题,你一开始要么往左走,要么往右走。
所以需要记录一下往左走的边数和往右走的边数,只要有一条路的边数是奇数,则先手赢;如果两条边都是偶数,则奇数赢。
实现代码如下:

#include <bits/stdc++.h>
using namespace std;
int n, a[22], n1, n2;
int main() {
    cin >> n;
    for (int i = 1; i <= n; i ++) cin >> a[i];
    for (int i = 1; i <= n && a[i]; n1 ++, i ++);
    for (int i = n; i >= 1 && a[i]; n2 ++, i --);
    puts( (n1%2 || n2%2) ? "YES" : "NO" );
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/codedecision/p/11793934.html