zoukankan      html  css  js  c++  java
  • *HDU1846HDU2188 巴什博奕

    Brave Game

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 10947    Accepted Submission(s): 7362


    Problem Description
    十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫《勇敢者的游戏》(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻。
    今天,大家选择上机考试,就是一种勇敢(brave)的选择;这个短学期,我们讲的是博弈(game)专题;所以,大家现在玩的也是“勇敢者的游戏”,这也是我命名这个题目的原因。
    当然,除了“勇敢”,我还希望看到“诚信”,无论考试成绩如何,希望看到的都是一个真实的结果,我也相信大家一定能做到的~

    各位勇敢者要玩的第一个游戏是什么呢?很简单,它是这样定义的:
    1、  本游戏是一个二人游戏;
    2、  有一堆石子一共有n个;
    3、  两人轮流进行;
    4、  每走一步可以取走1…m个石子;
    5、  最先取光石子的一方为胜;

    如果游戏的双方使用的都是最优策略,请输出哪个人能赢。
     
    Input
    输入数据首先包含一个正整数C(C<=100),表示有C组测试数据。
    每组测试数据占一行,包含两个整数n和m(1<=n,m<=1000),n和m的含义见题目描述。
     
    Output
    如果先走的人能赢,请输出“first”,否则请输出“second”,每个实例的输出占一行。
     
    Sample Input
    2 23 2 4 3
     
    Sample Output
    first second
     
    Author
    lcy
     
    Source

    ACM Short Term Exam_2007/12/13

    悼念512汶川大地震遇难同胞——选拔志愿者

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 8892    Accepted Submission(s): 5638


    Problem Description
    对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人员,以及进行心理疏导的心理学专家。根据要求,我校也有一个奔赴灾区救灾的名额,由于广大师生报名踊跃,学校不得不进行选拔来决定最后的人选。经过多轮的考核,形势逐渐明朗,最后的名额将在“林队”和“徐队”之间产生。但是很巧合,2个人的简历几乎一模一样,这让主持选拔的8600很是为难。无奈,他决定通过捐款来决定两人谁能入选。
    选拔规则如下:
    1、最初的捐款箱是空的;
    2、两人轮流捐款,每次捐款额必须为正整数,并且每人每次捐款最多不超过m元(1<=m<=10)。
    3、最先使得总捐款额达到或者超过n元(0<n<10000)的一方为胜者,则其可以亲赴灾区服务。
    我们知道,两人都很想入选志愿者名单,并且都是非常聪明的人,假设林队先捐,请你判断谁能入选最后的名单?
     
    Input
    输入数据首先包含一个正整数C,表示包含C组测试用例,然后是C行数据,每行包含两个正整数n,m,n和m的含义参见上面提到的规则。
     
    Output
    对于每组测试数据,如果林队能入选,请输出字符串"Grass", 如果徐队能入选,请输出字符串"Rabbit",每个实例的输出占一行。
     
    Sample Input
    2 8 10 11 10
     
    Sample Output
    Grass Rabbit
     
    Author
    lcy
     
    Source

    2008-06-18《 ACM程序设计》期末考试——四川加油!中国加油!

    巴什博弈(定理献上):

        只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜.

        n = (m+1)r+s , (r为任意自然数,s≤m), 即n%(m+1) != 0, 则先取者肯定获胜。

    巴什博弈还是很好理解滴,以你是先手的角度考虑。你想把对手给弄垮,那么每一局,你都必须构建一个局势,这个局势就是每次都留给对手m+1的倍数个物品(为什么留给m+1倍就一定能赢,你稍微动动脑子就出来了)。所以不只是取物品中的博弈可以用到巴什定理,还可以是报数之类的,看谁先报到100.并且每次报的数必须是1~10(包括1跟10),那么你每次都应该留给对手剩下的报数个数为11的倍数。
    --------------------------------------------------------------
    A.巴什博弈,一个人拿1~m个,那谁面对m+1的局势的的时候则必败,很明显,先拿的就是要造这个局势,如果n是(m+1)*r+s(k为任意,s<m+1),那么很明显先拿的拿掉s后,然后无论下一个拿多少你都可以保证你拿完后都是拿了m+1个,这样后拿的必定面对必败局势,比如23 2,23=(3×7)+2;那我第一次拿掉2,然后无论每次第二个拿几我都可以使得这轮总共拿3,然后他必定会面对3这个局势,然后我就必胜,那什么时候必败呢,很明显如果我面对的是(m+1)的倍数的局势就必败。

    代码:

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int n,m,t;
     6     cin>>t;
     7     while(t--)
     8     {
     9         cin>>n>>m;
    10         if(n%(m+1)==0) cout<<"Rabbit"<<endl;
    11         else cout<<"Grass"<<endl;
    12     }
    13     return 0;
    14 }
  • 相关阅读:
    《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇:简介及目录》(附上完整工程文件)
    Genesis-3D开源游戏引擎简介!
    《Genesis-3D开源游戏引擎--横版格斗游戏制作教程:简介及目录》(附上完整工程文件)
    《Genesis-3D开源游戏引擎-官方录制系列视频教程:进阶实例篇》
    《Genesis-3D开源游戏引擎-官方录制系列视频教程:基础操作篇》
    《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结
    《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇07:全屏炸弹》
    《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇06:计分》
    《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇05:角色中弹》
    《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇04:碰撞检测》
  • 原文地址:https://www.cnblogs.com/--ZHIYUAN/p/6160309.html
Copyright © 2011-2022 走看看