欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

F - A Simple Game HDU - 1851----------------------思维(尼姆博弈+巴什博弈)

程序员文章站 2022-06-29 08:45:08
...

F - A Simple Game HDU - 1851----------------------思维(尼姆博弈+巴什博弈)

F - A Simple Game HDU - 1851----------------------思维(尼姆博弈+巴什博弈)

题意:
n堆物品,每堆至少取一个,最多取k个,谁先取完谁就获胜。

解析:
巴什博弈:对于每堆物品,至少取一个,最多取k个,根据定义 n%(k+1)
尼姆博弈:根据巴什博弈公式 n%(k+1)的余数r (1<=r<=k) 那么就是说剩下来的至少取一个,或者不限取

所以先根据巴什博弈求出余数,然后把所有余数异或起来,如果异或=0 说明是奇异局势,先手必败

#include<bits/stdc++.h>
using namespace std;
int t;
int n,x,y;
int main()
{
  scanf("%d",&t);
  while(t--)
  {
    scanf("%d",&n);
    int sum=0;
    int r=0;
    for(int i=1;i<=n;i++)
    {
      scanf("%d %d",&x,&y);
      r=x%(y+1);
      sum^=r;
    }
    if(sum==0) puts("Yes");
    else puts("No");

  }
}

相关标签: 思维 博弈论