转载自https://blog.csdn.net/Brian_Pan_/article/details/103860752
可以把环想象成两条路,如果没有天生的0,那两条路就是一样的(如果有的话,就两个方向跑一遍,奇数个非零alice必胜)
如果是偶数个的话,就没有必胜的策略了,只能根据bob所走的选择我们Alice最优的方案(不是我们考虑的范围)
1 #include<iostream>
2 using namespace std;
3 const int N=30;
4 int a[N];
5 int main(void)
6 {
7 int n;
8 cin>>n;
9 for(int i=1;i<=n;i++)
10 {
11 cin>>a[i];
12 }
13 int ans1=0;
14 for(int i=1;i<=n;i++)
15 {
16 if(a[i])
17 ans1++;
18 }
19 int ans2=0;
20 for(int i=n;i>=1;i--)
21 {
22 if(a[i])
23 ans2++;
24 }
25 if(ans1&1||ans2&1)
26 cout<<"YES"<<endl;
27 else
28 cout<<"NO"<<endl;
29 return 0;
30 }
我们可以把这个环想象成两条路,如果路的尽头没有边权为 0
0 的边,那么两条路径就是一样的。
我们可以把这个环想象成两条路,如果路的尽头没有边权为 0
0 的边,那么两条路径就是一样的。
对于一条路径,设 Alice
Alice 为先手,那么她将她走过的路径边权变为 00。轮到 BobBob 时,他最多也只能有一条路可以走。如果他选择不将该路边权变为 00,下一步 AliceAlice 一折返他就输了。如果他将边权变为 00,那么就变成重复以上操作了
最后如果路径长度为奇数,AliceAlice 还是赢;路径长为偶数的话 Alice
Alice 就没有必胜策略
这样这题就被转化成判断两条路径奇偶性了
来源:https://www.cnblogs.com/greenofyu/p/12231945.html