ACM: NBUT 1107 盒子游戏 - 简单博弈

NBUT 1107  盒子游戏

Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:

Practice

Appoint description: 
System Crawler  (Aug 13, 2016 10:35:29 PM)

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<<"]\n"
#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\n");
		else
			printf("Alice\n");
	}
}

//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<<"]\n"
#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;
}

  

 
时间: 2024-10-14 12:14:12

ACM: NBUT 1107 盒子游戏 - 简单博弈的相关文章

NBUT 1107——盒子游戏——————【博弈类】

盒子游戏 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format: Submit Status Practice NBUT 1107 Description 有两个相同的盒子,其中一个装了n个球,另一个装了一个球.Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作每次操作时,游戏者先看看哪个盒子里的球的数目比较少,然后清空这个盒子(盒子里的球直接扔掉),然后把另一个盒子里的球拿一些到这个盒

NY562 &amp; CSU 盒子游戏【博弈】

盒子游戏 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述     有两个相同的盒子,其中一个装了 n 个球,另一个装了一个球.Alice 和 Bob 发明了一个游戏,规则如下:Alice 和 Bob 轮流操作,Alice 先操作.每次操作时,游戏者先看看哪个盒子里的球的数目比较少,然后清空这个盒子(盒子里的球直接扔掉),然后把另一个盒子里的球拿一些到这个盒子中,使得两个盒子都至少有一个球.如果一个游戏者无法进行操作,他(她)就输了.下图是一个典型的游戏: 面对两个各

[简单博弈] hdu 1525 Euclid&#39;s Game

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1525 Euclid's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1832    Accepted Submission(s): 808 Problem Description Two players, Stan and

盒子游戏

E - 盒子游戏Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%I64d & %I64uSubmit StatusDescription有两个相同的盒子,其中一个装了n个球,另一个装了一个球.Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作每次操作时,游戏者先看看哪个盒子里的球的数目比较少,然后清空这个盒子(盒子里的球直接扔掉),然后把另一个盒子里的球拿一些到这个盒子中,使得两个盒子都至少有一

HDU 1846 Brave Game (简单博弈)

HDU 1846 Brave Game (简单博弈) ACM 题目地址: HDU 1846 Brave Game 题意: 中文. 分析: 博弈入门. 如果n=m+1,因为最多取m个,所以先拿的人拿多少个,后拿的人能全拿走. 所以判断n%(m+1)即可. 代码: /* * Author: illuz <iilluzen[at]gmail.com> * File: 1846.cpp * Create Date: 2014-09-20 10:05:26 * Descripton: game */ #

hdu 2999 sg函数(简单博弈)

Stone Game, Why are you always there? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 393    Accepted Submission(s): 132 Problem Description "Alice and Bob are playing stone game...""E

Codeforces 15C Industrial Nim 简单博弈

题目链接:点击打开链接 题意: 给定n 下面n行,每行2个数u v 表示有v堆石子:u,u+1,u+2···u+v-1 问先手必胜还是后手必胜 思路: 首先根据Nim的博弈结论 把所有数都异或一下,看结果是0还是非0 而这里因为数字太多所以想优化 那么其实对于一个序列 u, u+1, u+2 ···· 显然 {4,5} {,6,7}, {8,9} 这样2个一组的异或结果就是1 那么只需要把序列分组,分成{偶数,奇数} 然后Y一下.. #include<stdio.h> #include<

NYOJ 562 盒子游戏

盒子游戏 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述     有两个相同的盒子,其中一个装了 n 个球,另一个装了一个球.Alice 和 Bob 发明了一个游戏,规则如下:Alice 和 Bob 轮流操作,Alice 先操作.每次操作时,游戏者先看看哪个盒子里的球的数目比较少,然后清空这个盒子(盒子里的球直接扔掉),然后把另一个盒子里的球拿一些到这个盒子中,使得两个盒子都至少有一个球.如果一个游戏者无法进行操作,他(她)就输了.下图是一个典型的游戏: 面对两个各

ACM模板——简单博弈

巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,最多取m个.最后取光者得胜. if(n%(m+1)) first win else second win 巴什博弈 变种:取光者输 if(!(n-1)%(m+1)) second win else first win 巴什博弈变种 威佐夫博弈:有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. double r = (sqrt(5.0)+1)/2