POJ 博弈论

poj1704 Georgia and Bob

题目链接:http://poj.org/problem?id=1704

题意:如图所示,两个人在玩一个游戏,排成直线的格子上有n个棋子,两人依次将棋子向左移动可以移动任意格子,但是不能超过前面的棋子,也不允许将两个棋子放在同一个格子里面,无法进行移动的一方失败,问对于某个状态先手是否能赢。

分析:若n为偶数,则将棋子两两分为一组,转化为Nim,棋子间的格子即为每个数,若右边的格子左移则可视为取走了石子,若左边的格子左移,第二个人只要将增加的格子减去就可回到原来状态;若n为奇数则增加一个零号棋子坐标为零即可

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int main(){
int a[1005],n,x;
cin>>x;
    while(x--){
        int n,x=0;
        cin>>n;
        for(int i=0;i<n;i++)
            cin>>a[i];
        if(n%2==1)
            a[n++]=0;
        sort(a,a+n);
        for(int i=0;i<n-1;i=i+2)
           x^=(a[i+1]-a[i]-1);
        if(x==0)
            cout<<"Bob will win"<<endl;
         else cout<<"Georgia will win"<<endl;
    }
}

poj2234 Matches Game博弈论

题目链接:http://poj.org/problem?id=2234

题意:有M堆石子,每堆石子的数量已知,有两个玩家,轮流从这些石子中选取某一堆从中拿走若干个,至少拿一个,也可以全拿走,问先手能否取胜

最基本的Nim博弈,直接异或运算

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
    int n,a[25];
    while(cin>>n){
        for(int i=1;i<=n;i++)
            cin>>a[i];
            int x=a[1];
        for(int i=2;i<=n;i++)
            x=x^a[i];
        if(x!=0)
            cout<<"Yes"<<endl;
        else cout<<"No"<<endl;

    }
}

  

原文地址:https://www.cnblogs.com/dlutjwh/p/10988179.html

时间: 2024-10-17 02:19:58

POJ 博弈论的相关文章

POJ 1143 记忆化搜索+博弈论

Number Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3181   Accepted: 1280 Description Christine and Matt are playing an exciting game they just invented: the Number Game. The rules of this game are as follows. The players take tu

POJ - 2348 Euclid&#39;s Game(博弈论入门题)

题目链接:poj.org/problem?id=2348 题意:给出两个数,两个人进行博弈,每个人都采取最优策略. 每个人可以进行操作:两个数中较大数减去较小数的倍数(可以是1,2...X倍),使得其中一个数先为零的获胜. 每次都先把较小值给a,较大值给b.一开始把必胜态给先手的那个人,然后进行判断. 1.b-a<=a  没办法只能一次一次计算,必胜态不断变换,直到其中一个数刚好为0. 2.b-a>a   不管怎样都是必胜态.b - xa <= a如果这个是必败态,那么b - (x-1)

poj 1079 Calendar Game(博弈论 SG)

Calendar Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2519    Accepted Submission(s): 1438 Problem Description Adam and Eve enter this year's ACM International Collegiate Programming Co

POJ【数论/组合/博弈论】

 POJ[数论/组合/博弈论]题目列表 POJ[数论/组合/博弈论]题目列表 原来的列表比较水,今天换了一个难一些的列表,重新开始做~ 红色的代表已经AC过,蓝色的代表做了但是还没过.这句话貌似在我空间里的每份列表里都有额. 博弈论 POJ 2234 Matches Game POJ 2975 Nim POJ 2505 A multiplication game POJ 1067 取石子游戏 POJ 2484 A Funny Game POJ 2425 A Chess Game POJ 29

【POJ】2234 Matches Game(博弈论)

http://poj.org/problem?id=2234 博弈论真是博大精深orz 首先我们仔细分析很容易分析出来,当只有一堆的时候,先手必胜:两堆并且相同的时候,先手必败,反之必胜. 根据博弈论的知识(论文 张一飞:<由感性认识到理性认识——透析一类搏弈游戏的解答过程>) 局面可以分解,且结果可以合并. 局面均是先手 当子局面是 胜 和 败,那么局面则为胜 当子局面是 败 和 胜,那么局面则为胜 当子局面是 败 和 败,那么局面则为败 当子局面为 胜 和 胜,那么局面为不确定 而这些性质

POJ 2348-Euclid&#39;s Game(博弈论)

Euclid's Game Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2348 Appoint description:  System Crawler  (2015-03-11) Description Two players, Stan and Ollie, play, starting with two natural num

POJ 2315:Football Game(博弈论)

[题目链接] http://poj.org/problem?id=2315 [题目大意] 两名球员轮流从N个球中挑出不多于M个射门,每个球半径都是R,离球门S. 每次只能踢出L以内的距离.进最后一个球者胜,求谁有必胜策略? [题解] 我们发现对数据进行处理之后,题目等价于给出n堆石子, 每堆石子中每次最多取k个石子,每次最多选取m个石子堆做操作的博弈问题 首先我们将每堆石子堆对k+1取模简化运算, 对于只能取一堆石子上的石子的做法我们是对所有的石子堆的sg值进行xor运算得到sg值 xor又称为

POJ 1704 Georgia and Bob(nim博弈论)

题目地址:POJ 1704 这个题实在巧妙..居然这样就可以转化成了经典的nim模型. 这题可以从左往右两两配对,如果是奇数个的话,就让最左边的与0配对.然后每当对方移动某一对的前一个,你总可以移动该对的后一个来移动回来.所以这是没有影响的.有影响的只是每一对中间的空格数.这就转化成了((n+1)/2)堆石子的游戏,每一堆的石子个数是每一对点之间的空格数.然后用异或求解. 代码如下: #include <iostream> #include <cstdio> #include &l

POJ 3688 Cheat in the Game(博弈论)

[题目链接] http://poj.org/problem?id=3688 [题目大意] 有俩人玩一个取石子的游戏,你是裁判. 游戏中有W块石头和N张卡片,卡片上分别写着数字Ai. 玩家随机抽走一张卡片,按卡片上的数字从石头堆中取走相应数量的石头, 如果石头不够,玩家重新抽卡片,取走最后一块石头的玩家获胜: 如果石头堆为空仍然未分出胜负,则拿回所有石头和卡片重新开始. 现在先手玩家贿赂了你,请你帮他构造必胜条件. 游戏中的卡片是固定的,但W可供你操作.问有多少小于或等于M的W满足要求. [题解]