CodeForces 630 R. Game(博弈论)

Description
一学生因挂科被迫和老师玩游戏,游戏规则如下:在一个n*n的棋盘上轮流下棋,初始时棋盘全空,每次只能在空格上下棋,而且此空格上下左右不能有棋子,但是对角可以有棋子,最后谁无棋可下谁输。假设学生和老师都足够机智,现给出棋盘大小,如果先手赢则输出1,否则输出2
Input
一个整数n(1<=n<=10^18)
Output
先手赢输出1,后手赢输出2
Sample Input
1
Sample Output
1
Solution
博弈论,如果n为奇数,那么先手第一步将棋子下在正中,那么之后无论后手下哪儿,先手都可以将棋下在与后手上一步棋关于棋盘中心对称对称的位置,最后一定是后手无棋可下,此时输出1;如果n为偶数,那么无论先手下哪儿,后手都可以将棋下在与先手上一步棋关于棋盘中心对称的位置,最后一定是先手无棋可下,此时输出2
Code

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
ll n;
int main()
{
    while(~scanf("%I64d",&n))
        printf("%d\n",n%2?1:2);
    return 0;
} 

你可能感兴趣的:(CodeForces 630 R. Game(博弈论))