HDU 4642 Fliping game

Alice and Bob are playing a kind of special game on an N*M board (N rows, M columns). At the beginning, there are N*M coins in this board with one in each grid and every coin may be upward or downward freely. Then they take turns to choose a rectangle (x  1, y  1)-(n, m) (1 ≤ x  1≤n, 1≤y  1≤m) and flips all the coins (upward to downward, downward to upward) in it (i.e. flip all positions (x, y) where x  1≤x≤n, y 1≤y≤m)). The only restriction is that the top-left corner (i.e. (x  1, y  1)) must be changing from upward to downward. The game ends when all coins are downward, and the one who cannot play in his (her) turns loses the game. Here's the problem: Who will win the game if both use the best strategy? You can assume that Alice always goes first.
 

Input

The first line of the date is an integer T, which is the number of the text cases. 
Then T cases follow, each case starts with two integers N and M indicate the size of the board. Then goes N line, each line with M integers shows the state of each coin, 1<=N,M<=100. 0 means that this coin is downward in the initial, 1 means that this coin is upward in the initial.
 

Output

For each case, output the winner’s name, either Alice or Bob.
 

Sample Input

     
     
     
     
2 2 2 1 1 1 1 3 3 0 0 0 0 0 0 0 0 0
 

Sample Output

     
     
     
     
Alice Bob

题意:ALICE 和 BOB进行一个游戏。有n*m个硬币摆成的矩阵。每次选一个位置到右下角位置所有一片硬币进行翻转。ALICE是先手。要求输出必胜的是谁。。

思路:很有意思的一题。如果注意到。不管是谁翻。每次肯定都会翻到最右下角的硬币。所以如果该硬币起始是1 BOB必胜 如果是0 ALICE必胜。。

#include <stdio.h>
int t, n, m, last;
int main()
{
    scanf("%d", &t);
    while (t --) {
	scanf("%d%d", &n, &m);
	for (int i = 0; i < n * m - 1; i ++) {scanf("%*d");}
	scanf("%d", &last);
	if (last) {printf("Alice\n");}
	else {printf("Bob\n");}
    }
    return 0;
}



你可能感兴趣的:(HDU 4642 Fliping game)