Alice 和 Bob 正在一个序列 ai 上玩游戏,Alice 先手,轮流玩。每一轮当前玩家可以取走序列中任意一个数,直到取完。
如果最后 Ailce 取走的数的和为偶数,则 Ailce 赢,否则 Bob 赢。保证每个人用最优策略玩。对于每组数据,输出赢家。
输入输出样例
输入 #14 3 1 3 5 4 1 3 5 7 4 1 2 3 4 4 10 20 30 40输出 #1
Alice Alice Bob Alice
共识:奇数 + 奇数 = 偶数;奇数 + 偶数 = 奇数;偶数 + 偶数 = 偶数。
统计序列 a 中偶数 ai 和奇数 ai 分别出现的次数 e、o,依次可确定下列几种情况,决定二人胜负态:
- 当 ≡2(mod4)o≡2(mod4) 时, Bob 存在必胜态;
Bob 仅需保证每次所取数字与 Alice 所取数字奇偶性相同即可,这样可以使二者取走的奇数个数相同。若在此过程中 Alice 取走了最后一个偶数,奇数必然剩余偶个。随后,Alice 和 Bob 各自将选择剩余奇数的一半。最后,Alice 和 Bob 都拥有 22o 个奇数,Alice 和为奇数,Alice 败。
- 当 ≡3(mod4)o≡3(mod4) 时, Alice 存在必胜态;
Alice 首先选择一个奇数,若 Bob 能从剩下的数字中取走偶个奇数,则 Bob 胜。从情况 1 中可知,Bob 必败。
- 当 ≡0(mod4)o≡0(mod4) 时, Alice 存在必胜态;
Alice 首先选择一个偶数,在随后的操作中,Alice 仅需保证每次所取数字与 Bob 所取数字奇偶性相同即可,这样可以使二者取走的奇数个数相同。若在此过程中偶数被取完,奇数必然剩余偶个。随后,Alice 和 Bob 各自将选择剩余奇数的一半。最后,Alice 和 Bob 都拥有 22o 个奇数,Alice 和为偶数,Alice 胜。
- 当 ≡1(mod4)o≡1(mod4) 时,先选择奇数的人败。
标签:Even,mod2,mod4,Addicts,奇数,Number,Alice,偶数,Bob From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17480899.html先选择奇数的人将会导致对手出现情况 3,对手必胜。博弈开始时,如果 e 为偶即 ≡0(mod2)e≡0(mod2),则 Bob 将会取走最后一个偶数,Alice 败;e 为奇即 ≡1(mod2)e≡1(mod2),则 Alice 胜。
//https://www.luogu.com.cn/problem/CF1738C #include<bits/stdc++.h> using namespace std; const int N=1e5+10; int num1,num2,n,res,t; int main() { cin>>t; while(t--) { cin>>n; for(int i=1;i<=n;i++) { int a; cin>>a; if(a%2==0) num2++; else num1++; } if(num1%4==0||num1%4==3||(num1%4==1&&num2%2==1)) cout<<"Alice"<<endl; else cout<<"Bob"<<endl; } return 0; }