zoukankan      html  css  js  c++  java
  • cf493D Vasya and Chess

    D. Vasya and Chess
    time limit per test 2 seconds
    memory limit per test 256 megabytes
    input standard input
    output standard output

    Vasya decided to learn to play chess. Classic chess doesn't seem interesting to him, so he plays his own sort of chess.

    The queen is the piece that captures all squares on its vertical, horizontal and diagonal lines. If the cell is located on the same vertical, horizontal or diagonal line with queen, and the cell contains a piece of the enemy color, the queen is able to move to this square. After that the enemy's piece is removed from the board. The queen cannot move to a cell containing an enemy piece if there is some other piece between it and the queen.

    There is an n × n chessboard. We'll denote a cell on the intersection of the r-th row and c-th column as (r, c). The square (1, 1)contains the white queen and the square (1, n) contains the black queen. All other squares contain green pawns that don't belong to anyone.

    The players move in turns. The player that moves first plays for the white queen, his opponent plays for the black queen.

    On each move the player has to capture some piece with his queen (that is, move to a square that contains either a green pawn or the enemy queen). The player loses if either he cannot capture any piece during his move or the opponent took his queen during the previous move.

    Help Vasya determine who wins if both players play with an optimal strategy on the board n × n.

    Input

    The input contains a single number n (2 ≤ n ≤ 109) — the size of the board.

    Output

    On the first line print the answer to problem — string "white" or string "black", depending on who wins if the both players play optimally.

    If the answer is "white", then you should also print two integers r and c representing the cell (r, c), where the first player should make his first move to win. If there are multiple such cells, print the one with the minimum r. If there are still multiple squares, print the one with the minimum c.

    Sample test(s)
    input
    2
    output
    white
    1 2
    input
    3
    output
    black
    Note

    In the first sample test the white queen can capture the black queen at the first move, so the white player wins.

    In the second test from the statement if the white queen captures the green pawn located on the central vertical line, then it will be captured by the black queen during the next move. So the only move for the white player is to capture the green pawn located at (2, 1).

    Similarly, the black queen doesn't have any other options but to capture the green pawn located at (2, 3), otherwise if it goes to the middle vertical line, it will be captured by the white queen.

    During the next move the same thing happens — neither the white, nor the black queen has other options rather than to capture green pawns situated above them. Thus, the white queen ends up on square (3, 1), and the black queen ends up on square (3, 3).

    In this situation the white queen has to capture any of the green pawns located on the middle vertical line, after that it will be captured by the black queen. Thus, the player who plays for the black queen wins.

    这题简直丧心病狂啊……我都想骂出题人了

    如果n是奇数,黑子赢。如果n是偶数,白子赢,输出的第一步是(1,2)

    我的想法是对于最中间那道竖线对称,白子怎么走黑子也怎么走

    比如对于5*5的棋盘,从中间第三道划分成左边2*5的部分和右边2*5的部分

    那么白子在左边走,黑子在右边走。白子怎么走黑子也怎么走

    当白子走完所有左边可以走的路的时候,它一定要从第二道走到中间第三道来

    但是此时黑子一定在第四道跟白子在同一水平线的位置

    所以白子能到达的第三道的点黑子也一定能到达

    因此n是奇数时白子必败。同理n是偶数时黑子必败

    黄巨大的想法更暴力:

    白的只要一直右走

    每走一次,黑的活动范围就会少条一条对角线

    黑的可以学它往左走,显然如果n是奇数白子就输了

     否则的话无论黑怎么走都是输 
     
    总之代码就一点点
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<deque>
    #include<set>
    #include<map>
    #include<ctime>
    #define LL long long
    #define inf 0x7ffffff
    #define pa pair<int,int>
    #define pi 3.1415926535897932384626433832795028841971
    using namespace std;
    inline LL read()
    {
        LL x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int n;
    int main()
    {
    	n=read();
    	if (n&1){printf("black
    ");}
    	else printf("white
    %d %d
    ",1,2);
    	return 0; 
    }
    ——by zhber,转载请注明来源
  • 相关阅读:
    JavaScript 技巧
    网页打开客户端本机程序,未安装则提示要求安装
    IIS(World Wide Web Publishing Service)127 无法响应的解决方法
    Jquery hover事件 示例
    JavaScript MVC
    jquery调用基于.NET Framework 3.5的WebService返回JSON数据
    文件下载类
    网页打印局部示例
    未能执行URL(FCK)
    网页中各种宽高
  • 原文地址:https://www.cnblogs.com/zhber/p/4141983.html
Copyright © 2011-2022 走看看