UVA12293 Box Game

Posted wlzs1432

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA12293 Box Game相关的知识,希望对你有一定的参考价值。

UVA12293 Box Game

题意

两人玩游戏,有两个盒子,开始时第一个盒子装了n个球, 第二个盒子装了一个球。每次操作都将刷量少的盒子的球倒掉,然后再从数量多的盒子中拿出若干个球放到空盒子里,最终状态为(1,1),达到这个状态的玩家获胜。

题解

显然原问题等价于有n个石子,每次至少拿一个,至多拿一半。

对于这个问题:

当n为奇数的时候 SG(n) = SG(n/2)

当n为偶数的时候SG(n) = n/2

 

#include<bits/stdc++.h>

using namespace std;

inline int read()
{
    int f = 1 , x = 0;
    char ch;
    do
    {
        ch = getchar();
        if(ch == -) f = -1; 
    }while(ch < 0 || ch > 9);
    do
    {
        x = (x<<3) + (x<<1) + ch - 0;
        ch = getchar();
    }while(ch >= 0 && ch <= 9);
    return f*x;
} 
 
int n;
 
inline int SG(int x)
{
     if(x&1) return SG(x/2);
     else return x/2;
} 
 
int main()
{
     while(1)
     {
         n = read();
         if(!n) break;
         if(SG(n) == 0) cout << "Bob" << endl;
         else cout << "Alice" << endl;
    }
    return 0;
}

 

以上是关于UVA12293 Box Game的主要内容,如果未能解决你的问题,请参考以下文章

「UVA12293」 Box Game

[UVA-11039]Children's Game

UVA1204 Fun Game

UVA1045 The Great Wall Game

例 7-12 UVA - 1343The Rotation Game

UVA10891 Game of Sum(区间dp)