POJ 1740:A New Stone Game

原创 2015年07月11日 10:34:29

A New Stone Game

Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 5113 Accepted: 2806

Description
Alice and Bob decide to play a new stone game.At the beginning of the game they pick n(1<=n<=10) piles of stones in a line. Alice and Bob move the stones in turn.
At each step of the game,the player choose a pile,remove at least one stones,then freely move stones from this pile to any other pile that still has stones.
For example:n=4 and the piles have (3,1,4,2) stones.If the player chose the first pile and remove one.Then it can reach the follow states.
2 1 4 2
1 2 4 2(move one stone to Pile 2)
1 1 5 2(move one stone to Pile 3)
1 1 4 3(move one stone to Pile 4)
0 2 5 2(move one stone to Pile 2 and another one to Pile 3)
0 2 4 3(move one stone to Pile 2 and another one to Pile 4)
0 1 5 3(move one stone to Pile 3 and another one to Pile 4)
0 3 4 2(move two stones to Pile 2)
0 1 6 2(move two stones to Pile 3)
0 1 4 4(move two stones to Pile 4)
Alice always moves first. Suppose that both Alice and Bob do their best in the game.
You are to write a program to determine who will finally win the game.

Input
The input contains several test cases. The first line of each test case contains an integer number n, denoting the number of piles. The following n integers describe the number of stones in each pile at the beginning of the game, you may assume the number of stones in each pile will not exceed 100.
The last test case is followed by one zero.

Output
For each test case, if Alice win the game,output 1,otherwise output 0.

Sample Input
3
2 1 3
2
1 1
0

Sample Output
1
0

题意:Alice和Bob没事就喜欢玩游戏,玩的还竟都是本身特别无聊但一出题就特别高端的那种拿石子游戏(……)。给定几个堆的石子,A和B分别拿一个堆中任意数量的石子,然后可放可不放到其他有石子的堆中,谁最后没有石子拿谁就输了。每次都是A先拿,输出1代表A赢,输出0代表B赢

发现现在做过的题,包括博弈论还有很多类型的题目,都是从最小的情况最简单的情况开始想,之后在往后面去推,当然dp这种就更不用说了。假设就有一个堆,那肯定是A赢,因为A直接把所有的石子拿走,B就没有石子拿了。假设有两个堆,如果是两个相等的堆,那就是B赢。因为A无论怎么拿,B都可以在另一个堆上做相同的动作,导致一定是B拿到了最后的石子。如果是两个不同数量的堆,那又一定是A赢,因为A先拿,可以导致上面相等的堆的情况,而这时A、B的拿的顺序已经换过来了,所以A赢。所以这时我们会发现拿走石子可以,放回石子到其他有石子的堆里这个动作是没有用的,因为A、B都采取最好策略,每一堆石子数量比不放回的情况多是没有用的,最后也都是拿走的命。所以就这么一直地推下去,会发现整个过程就是看石子堆是不是一对一对的过程,奇数堆的一定是A赢,偶数堆的要是一对一对就是B赢,否则就是A赢。这样代码就好写了

所以这次做题的经验就是以后拿到博弈的题目,都要从最小最简单的情况搞起,再往后面推是一个好方法。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

int n[105];

int main()
{
    int num;
    while(cin>>num)
    {
        if(!num)
            break;
        memset(n,0,sizeof(n));

        int i,temp;

        if(num%2)
        {
            for(i=1;i<=num;i++)
                cin>>temp;
            cout<<1<<endl;
        }
        else
        {
            for(i=1;i<=num;i++)
            {
                cin>>temp;
                n[temp]++;
            }
            int flag=0;
            for(i=0;i<=104;i++)
            {
                if(n[i]%2)
                    flag=1;
            }
            if(flag)
                cout<<1<<endl;
            else
                cout<<0<<endl;
        }
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

测试开发面试真题(百度)

1、黑盒测试和白盒测试常用的测试方法有哪些?举例说明 白盒测试:逻辑覆盖法,主要包括语句覆盖、判断覆盖、条件覆盖、判断条件覆盖、条件组合覆盖和路径覆盖。     基本路径测试法。 黑盒测试:等价...

【面经笔记】TCP

确认应答当数据到达接收主机时,接收端主机会返回一个确认应答:ACK如果发送端一定时间内没有等到确认应答,认为数据丢失,并重发。没有收到确认应答有可能是因为:数据丢失 或者 应答丢失为了避免应答丢失时,...

poj1740 A New Stone Game----分析P/N 从剩下的石子中取任意颗放到别的堆

A New Stone Game Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4111 ...

【poj1740】 A New Stone Game

http://poj.org/problem?id=1740 (题目链接)男人八题之一题意:对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩...

poj 1740 A New Stone Game

A New Stone Game Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4372 ...
  • WEYuLi
  • WEYuLi
  • 2013年07月05日 08:47
  • 566

POJ 1740 A New Stone Game 男人八题之一

POJ 1740 A New Stone Game Alice and Bob decide to play a new stone game.At the beginning of the game...
  • Mrx_Nh
  • Mrx_Nh
  • 2017年04月09日 15:13
  • 113

poj1740 A New Stone Game(博弈)

A New Stone Game Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5028 ...

poj 1740 A New Stone Game(博弈)

【题目大意】:有N堆石头,每堆石头数目在1到100之间,最多有10堆.两人分别取走石头.取石头的规则是:每次只能从1堆中取,每次取走至少1个.取过后还可以把这堆的石头任意分配到其它堆上,当然也可以不分...
  • new_wu
  • new_wu
  • 2012年03月19日 20:50
  • 325

【POJ1740】A New Stone Game 构造博弈

题意:多组数据,每组数据一个先n,然后给出n堆石子的数目。 两人轮流操作,每次可以从某数量为xi的石子堆中扔掉k个石子(k∈[1,xi]),然后剩余xi-k个,可以把g个石子随意分给其他堆(不能凭空...
  • Vmurder
  • Vmurder
  • 2015年01月10日 15:17
  • 683

POJ_1740 A New Stone Game 博弈

http://poj.org/problem?id=1740 题意: 给你N堆石子,每堆石子都有一定的数量,有两个人玩一个游戏,游戏的规则是每个人每次可以选择一堆石子,并从中去掉至少一颗石子,然后...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 1740:A New Stone Game
举报原因:
原因补充:

(最多只允许输入30个字)