zoukankan      html  css  js  c++  java
  • ACM: NBUT 1107 盒子游戏

     NBUT 1107  盒子游戏
    Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:
    Appoint description: 

    Description

    有两个相同的盒子,其中一个装了n个球,另一个装了一个球。Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作每次操作时,游戏者先看看哪个盒子里的球的数目比较少,然后清空这个盒子(盒子里的球直接扔掉),然后把另一个盒子里的球拿一些到这个盒子中,使得两个盒子都至少有一个球。如果一个游戏者无法进行操作,他(她)就输了。下图是一个典型的游戏: 
    面对两个各装一个球的盒子,Bob无法继续操作,因此Alice获胜。你的任务是找出谁会获胜。假定两人都很聪明,总是采取最优策略。 

    Input

    输入最多包含300组测试数据。每组数据仅一行,包含一个整数n(2<=n<=10^9)。输入结束标志为n=0。

    Output

    对于每组数据,输出胜者的名字。

    Sample Input

    2 
    3 
    4 
    0
    

    Sample Output

    Alice 
    Bob 
    Alice
    

    Hint



    //思维题,简单博弈,直接插入走火入魔的题解。。。
    
    
    //AC代码【递归写法】:
    #include"algorithm"
    #include"iostream"
    #include"cstring"
    #include"cstdlib"
    #include"cstdio"
    #include"string"
    #include"vector"
    #include"queue"
    #include"cmath"
    #include"map"
    using namespace std;
    typedef long long LL ;
    #define memset(x,y) memset(x,y,sizeof(x))
    #define memcpy(x,y) memcpy(x,y,sizeof(x))
    #define FK(x) cout<<"["<<x<<"]
    "
    #define bigfor(T)  for(int qq=1;qq<= T ;qq++)
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    
    int fun(int n) {
    	int i=1;
    	while(i<n) {
    		i=i*2+1;
    		if(i==n)
    			return 1;
    	}
    	return 0;
    }
    int main() {
    	int n;
    	while(~scanf("%d",&n)) {
    		if(!n)break;
    		if(fun(n))
    			printf("Bob
    ");
    		else
    			printf("Alice
    ");
    	}
    }
    
    
    
    //AC代码【幂写法】:

    #include"algorithm"
    #include"iostream"
    #include"cstring"
    #include"cstdlib"
    #include"cstdio"
    #include"string"
    #include"vector"
    #include"queue"
    #include"cmath"
    #include"map"
    using namespace std;
    typedef long long LL ;
    #define memset(x,y) memset(x,y,sizeof(x))
    #define memcpy(x,y) memcpy(x,y,sizeof(x))
    #define FK(x) cout<<"["<<x<<"]
    "
    #define bigfor(T)  for(int qq=1;qq<= T ;qq++)
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    
    
    int main() {
    	int n;
    	while(~scanf("%d",&n)) {
    		if(!n)break;
    		if(n%2==0) {
    			puts("Alice");
    			continue;
    		}
    		n+=1;
    		while(n) {
    			if(n==1) {
    				puts("Bob");
    				break;
    			}
    			if(n%2) {
    				puts("Alice");
    				break;
    			}
    			n/=2;
    		}
    	}
    	return 0;
    }
    
    
    

      


     
  • 相关阅读:
    用graphviz,pygraphviz快速自动绘图
    python 实现的huffman 编码压缩,解码解压缩
    python 字符串的显示
    PKU acm 1651 multiplication puzzle
    SQL Server中的数据类型详解
    (转) treeview 的设计思路
    将英文的week 转换为中文的 简单的方法
    常用的文件对应的MIME类型:
    客户端传参问题
    绑定数据与截取的另外的一中写法
  • 原文地址:https://www.cnblogs.com/HDMaxfun/p/5782463.html
Copyright © 2011-2022 走看看