P1288 取数游戏(博弈论)

转载自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 就没有必胜策略

这样这题就被转化成判断两条路径奇偶性了

猜你喜欢

转载自www.cnblogs.com/greenofyu/p/12231945.html