2463: [中山市选2009]谁能赢呢?
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1822 Solved: 1344
[ Submit][ Status][ Discuss]
Description
Input
Output
对于每组数据,如果小明最后能赢,则输出”Alice”, 否则输出”Bob”, 每一组答案独占一行。
Sample Input
0
Sample Output
题目大意:
如题。
思路:
-----------------------------------------------------------
B | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
--------------------------------------------------------
Alice 只能走 1 Bob 只能走 0
那么我们只需要观察一下相应的 n * n的方格中 被包围的点是 1 还是 0 就可以了。
这样找到的规律是 奇数 Bob 偶数 Alice
另外证明的方法:
对于 n 为偶数的方格,可以用 1 * 2 的骨牌铺满。
对于 n 为奇数的方格,用 1 *2 的方格铺的话,会剩下一个方格。
那么先手走骨牌一端,后手会走骨牌的另一端,因此,答案就可以看得出来。
其实这个想法和上面的想法是差不多的。我说这么认为的。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(666)
{
scanf("%d",&n);
if(n==0)
break;
if(n&1)
puts("Bob");
else
puts("Alice");
}
}