题目链接:P1288 取数游戏 II - 洛谷
分析:若某点沿左边或右边到最近的边的值为0的边须经过的边数为奇数,则处在该位置上的人只需延能通过奇数条边到达边为0的方向移动,每次移动都把经过的边的值边为0,则对手最终将会处于一种左右边都为0的状态,所以上述状态为必胜态。
若先手最初所处位置处于上述状态,先手将会有必胜策略。
若没有处于上述状态,有两种可能:1、初始位置已经是左右边都为0的状态,2、只要先手移动任意一步,后手将会处于上述的必胜态。
所以,此题只需判断先手最初位置是否处于上述必胜态。
#include<bits/stdc++.h>
using namespace std;
int n,a[30];
int cnt = 0;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
if(a[1] == a[n] && a[1] == 0)
{
printf("NO\n");
return 0;
}
for (int i = 1; i <= n; i++)
{
if(a[i] == 0)
{
break;
}
else cnt++;
}
if (cnt % 2)
{
printf("YES\n");
return 0;
}
else cnt = 0;
for (int i = n; i >= 1; i--)
{
if(a[i] == 0)
{
break;
}
else cnt++;
}
if (cnt % 2)
{
printf("YES\n");
return 0;
}
printf("NO\n");
return 0;
}