首页 > 其他分享 >1738C-Even Number Addicts - dp, games, greedy

1738C-Even Number Addicts - dp, games, greedy

时间:2022-10-06 14:00:41浏览次数:64  
标签:Even 奇数 int 1738C Number Alice 偶数 必胜 Bob

 

 

void solve() {
  int n;
  cin >> n;

  int odd = 0, even = 0;
  for (int i = 0; i < n; i++) {
    int a; cin >> a;
    if (a & 1) odd++;
    else even++;
  }

  int t = odd & 3;
  if (!t || (t == 1 && (even & 1)) || t == 3) {
    cout << "Alice\n";
  }
  else cout << "Bob\n";
}

 

C. Even Number Addicts

题意:有n个数,Alice和Bob进行博弈,每个人每一轮从中选择一个数,并删除,Alice先手。如果Alice拿到的数之和为偶数那么Alice赢,否则Bob赢。两人都取最优解,问谁能赢得游戏。(n<=100)

题解:由于n只有100,可以二维dp直接过。不过有更好的贪心方法。

假设奇数的个数为x,偶数的个数为y

    • 如果x≡0 mod4 Alice必胜。因为如果y为偶数,则Alice可以先取奇数,然后当Bob取奇数的时候,Alice再取奇数,这样保证Alice刚好能拿到一半的奇数。如果y为奇数,则Alice先拿偶数。同样可以保证Alice刚好能拿到一半的奇数。

    • x≡1 mod4

      • 如果y为奇数,则Alice必胜。因为Alice总可以让Bob取奇数时再取奇数,所以取得的奇数个数为偶数。
      • 如果y为偶数,则Alice必败。因为Bob可以跟着Alice拿,Alice一定拿到奇数个奇数
    • x≡2 mod4 Alice必败。当y为奇数时,如果Alice取奇数,则Bob取一个偶数,转化为上一种情况种的第二种子情形。当y为偶数时,Bob跟着Alice取即可。这样一定保证Alice只能取奇数个奇数。

    • x≡3mod4 Alice必胜。Alice可以先拿走一个奇数。对于Bob来说,转化为上一种情况,此时Bob必败,说明Alice必胜

标签:Even,奇数,int,1738C,Number,Alice,偶数,必胜,Bob
From: https://www.cnblogs.com/zrzsblog/p/16757485.html

相关文章