E - 盒子游戏
有两个相同的盒子,其中一个装了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
应该算博弈吧 发现一到比赛就懒得多想 各种粗暴= =
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<stack> #define mem(a,b) memset(a,b,sizeof(a)) #define ll __int64 #define MAXN 1000 #define INF 0x7ffffff #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; int main() { int n,i,j; while(scanf("%d",&n)!=EOF) { if(n==0) break; if(n%2==0) { printf("Alice "); } else { int temp=1; int ok=1; while(temp<n) { temp=temp*2+1; if(temp==n) ok=0; } if(ok) printf("Alice "); else printf("Bob "); } } return 0; }