题目链接:http://codeforces.com/problemset/problem/493/D
题目大意:在一个n×n的棋盘中,(1,1)为白皇后,(1,n)为黑皇后,其它地方全是两个皇后能吃的棋子,皇后的攻击范围是横着,竖着,和斜着的,但是每次只能吃某个方向中最近的那个,不可以隔着一个棋子吃。每次白皇后和黑皇后轮流操作,每次执行必须要么吃到一枚棋子然后继续,要么可以吃到对方皇后然后结束。
思路:然后n是偶数是白棋赢,奇数是黑棋赢。
如果是2×2的棋盘,那么一开始很明显是白棋赢。
如果是3×3的棋盘,看下面图片很明显,赢得方式有两种,但是第一种方法稳赢,白棋怎么走,黑棋就怎么走,白棋是先手,肯定要先突破中间的一行,因为黑棋模仿白棋走,始终在一列,白棋突破中间一行的时候黑棋就在等着干它。然后也很容易推广到其它奇数情况,肯定也是黑棋赢。
这里写图片描述
然后如果是偶数的话,白棋先往下走一下,这个时候局势就刚好逆转,相当于n为奇数的时候,白皇后和黑皇后掉了个位置,那就是白皇后赢。

#include<iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        if(n&1) cout<<"black"<<endl;
        else cout<<"white"<<endl<<"1 2"<<endl;    
    }
    return 0;
} 
Last modification:September 19th, 2019 at 12:31 am
如果觉得我的文章对你有用,请随意赞赏