XTU OJ 1209 Alice and Bob 2014(嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛)

Problem Description

The famous "Alice and Bob" are playing a game again. So now comes the new problem which need a person smart as you to decide the winner. The problem is as follows: They are playing on a rectangle paper, Alice and Bob take turn alternatively, for each turn, a people cut the rectangle vertically or horizontally, the result two rectangle after cut must be IDENTICAL, also the side must be integer, after the cut, one rectangle will be descarded. The first people fail to cut lose the game. Of course, Alice makes first as usual.

Input

First Line contains an integer t indicate there are t cases(1≤t≤1000) For each case: The input consists of two integers w and h(1≤w,h≤1,000,000,000), the size of rectangle.

Output

First output Case number For each case output Alice or Bob, indicate the winner.

Sample Input

2
1 2
2 2

Sample Output

Case 1: Alice
Case 2: Bob


上次比赛的题,比赛完了就没去看它了,最近几天发现oj上有题目了,就把这几道题重新做了一下,这道题,上次比赛的时候看到这道题还以为是博弈的题,以为要用DP去做,所以题目都没怎么去看,就直接跳过了,后来看到a的人比较多,就仔细看了一下题目,读懂题意之后,发现其实很简单的一道题,做的慢了。比赛时对于题目难易的分析还是不够;
记录一下自己的思路,首先分析给的w,h是奇数还是偶数,如果两个都是奇数,说明就不能再分了,分到1也不能分了(1也是奇数),当有一个是偶数都还可以继续分,我用的递归,如果能分就一直分下去,直到不能分为止;
下面是ac的代码;
#include <iostream>
#include <cstdio>
using namespace std;
int j;
void compete(int w,int h)//递归
{
    if(w%2==0) //这里还可以写成 (!w&1)
    {
        w/=2;
        j++;
        compete(w,h);
    }
    else if(h%2==0)
    {
        h/=2;
        j++;
        compete(w,h);
    }
}
int main()
{
    int t,i;
    int w,h;
    scanf("%d",&t);
    for(i=1;i<=t;i++)
    {
        j=0;
        scanf("%d%d",&w,&h);
        compete(w,h);
        printf("Case %d: ",i);
        if(j%2==0)
            printf("Bob\n");
        else
            printf("Alice\n");
    }
    return 0;
}


你可能感兴趣的:(ACM)