codeforces 120E Put Knight!

来源:互联网 发布:axure7.0mac中文版下载 编辑:程序博客网 时间:2024/06/05 18:22

题目链接:传送门。

Petya and Gena play a very interesting game "Put a Knight!" on a chessboard n × n in size. In this game they take turns to put chess pieces called "knights" on the board so that no two knights could threat each other. A knight located in square (r, c) can threat squares (r - 1, c + 2), (r - 1, c - 2), (r + 1, c + 2), (r + 1, c - 2), (r - 2, c + 1), (r - 2, c - 1), (r + 2, c + 1) and (r + 2, c - 1) (some of the squares may be located outside the chessboard). The player who can't put a new knight during his move loses. Determine which player wins considering that both players play optimally well and Petya starts.

Input

The first line contains integer T (1 ≤ T ≤ 100) — the number of boards, for which you should determine the winning player. Next T lines contain T integers ni (1 ≤ ni ≤ 10000) — the sizes of the chessboards.

Output

For each ni × ni board print on a single line "0" if Petya wins considering both players play optimally well. Otherwise, print "1".

Examples
Input

221

Output

10

【题意】

给你一个n,表示这里有一个n*n的棋盘,两个人相互在棋盘上方象棋中的马,要求放下去的马不能和之前放下去的马相互攻击,也就是说一个马放下去的话就不能在马跳日对应的八个方向上放马。然后,放下去最后一个马的人胜利,问你是否能先手必胜。

【分析】

开始以为是博弈,后来就打了个表,答案显然是很明显,然后就交了一发,过了,然后就证明了一下。

规律很明显:当n是奇数的时候先手必胜,否则后手必胜。

下面是证明:

对于一个人的一次操作来说,我们假设他和他导致不能放马的地方都被他占掉了,显然可以得到每次马占的位置都是奇数个,也就是说当n是奇数的时候,显然可以放下去奇数个马,否则就能放下去偶数个马,也就是对应的先手必胜和后手必胜。

【代码】

#include<bits/stdc++.h>using namespace std;int main() {    freopen("input.txt","r",stdin);    freopen("output.txt","w",stdout);    int T,a;    scanf("%d",&T);    while(T--)    {        scanf("%d",&a);        if(a&1) puts("0");        else puts("1");    }    return 0;}
原创粉丝点击