码迷,mamicode.com
首页 > 其他好文 > 详细

UVA12293 Box Game

时间:2020-07-15 12:56:03      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:开始   read   line   div   getc   return   span   else   ace   

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

标签:开始   read   line   div   getc   return   span   else   ace   

原文地址:https://www.cnblogs.com/wlzs1432/p/13304710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!