Codeforces 493D Vasya and Chess

题目链接:http://codeforces.com/problemset/problem/493/D


题意:有一个n*n的棋盘,(1,1)和(1,n)处分别放置黑白2色的皇后,其余格子放置绿色的棋子,白色皇后先移动,每次移动必须吃掉一个棋子,如果己方皇后被吃掉和无法移动则输,问那方一定会赢,如果白方赢了输出第一步


思路:好久没看到过这么简单的博弈论了……首先确定2种情况,n=2的时候谁先手谁胜,n=3的时候谁先手谁负,假设一个n*n大小的棋盘,白方皇后向下移动一格就变成了(n-1)*n大小的棋盘不过是由黑方先手,黑方皇后向上在移动一格就变成了(n-2)*n大小的棋盘直到棋盘变成3*n则可以判断谁胜谁负;如果白方皇后向右移动,黑方皇后同时向右移动,棋盘视为n*(n-1)大小,重复n-1次之后白方皇后必定只能向下移动,则棋盘视为(n-1)*大小的棋盘不过由黑方先手,如此一来只要判断n的奇偶性就可以判断输赢了,白方皇后必赢的情况第一步一定是向下移动


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
    int n;
    while (scanf("%d",&n)!=EOF)
    {
        if (n%2==0)
        {
            printf("white\n%d %d\n",1,2);
        }
        else printf("black\n");
    }
}


你可能感兴趣的:(ACM,codeforces,博弈论)