• hdu 1851 A Simple Game 博弈论


    简单博弈问题(巴什博弈-Bash Game)

    巴什博弈:只有一堆n个物品,两个人轮流从这对物品中取物,规定每次至少取一个,最多取m个,最后取光着得胜。

    很容易想到当n%(m+1)!=0时,先取者必胜,第一次先拿走n%(m+1)个,以后每个回合都保持两人拿走的物品总和为m+1即可。

    这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报10个,谁能报到100者胜。

    此题可以把每堆石头的取法看作是一个BashGame,这样只需将每组石头按照BashGame的取法判断,然后将n堆石头做异或,

    如果异或的结果不为0,则老师获胜,否则Agrael取胜。

    代码如下:

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 #include<iomanip>
     5 #include<cmath>
     6 #include<cstring>
     7 #include<vector>
     8 #define ll __int64
     9 #define pi acos(-1.0)
    10 #define MAX 50000
    11 using namespace std;
    12 int main(){
    13     int t,m,s,c,ans;
    14     cin>>t;
    15     while(t--){
    16         cin>>m;
    17         ans=0;
    18         for(int i=0;i<m;i++){
    19             scanf("%d%d",&s,&c);
    20             ans^=s%(c+1);
    21         }
    22         puts(ans!=0?"No":"Yes");
    23     }
    24     return 0;
    25 }
    View Code

  • 相关阅读:
    spring学习10-AOP
    spring学习9-代理模式
    spring学习6-bean的自动装配
    PyQT5使用心得
    Python 时间戳和日期相互转换
    requests模块的入门使用
    Celery异步任务
    MySQL和python交互
    MySQL高级
    MySQL中select的使用
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3251449.html
Copyright © 2020-2023  润新知