时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 128 测试通过 : 2
比赛描述

当日遇到月,于是有了明。当我遇到了你,便成了侣。

那天,日月相会,我见到了你。而且,大地失去了光辉,你我是否成侣?这注定是个凄美的故事。

小张和所有世俗的人们一样,期待那百年难遇的日食。驻足街头看天,看日月渐渐走近,小张的脖子那个酸呀(他坚持这个姿势已经有半个多小时啦)。他低下仰起的头,环顾四周。忽然发现身边竟站着漂亮的赵mm。天渐渐暗下,赵mm在这街头竟然如此耀眼,她是天使吗?站着小张身边的天使。

小张对赵mm惊呼:“缘分呐~~”。赵mm却毫不含糊:“是啊,500年一遇哦!”(此后省略5000字….)

小张赶紧向赵mm要联系方式,可赵mm说:“我和你玩个游戏吧,赢了,我就把我的手机号告诉你。”小张,心想天下哪有题目能难倒我呢,便满口答应下来。赵mm开始说游戏规则:“这里有一个1*n的棋盘,我们轮流放一个棋子上去,并且用一样的棋子,你先放,谁最先将3个棋子连在一起谁就赢。”当然,出于对校长的考验,赵mm会尽力去赢得比赛。作为资深僚机的你,能帮助小张,得到赵mm的手机号吗?

输入

输入包括一行,这一行只包含一个整数n(3 ≤ n ≤ 2000)

输出

如果小张赢了则输出1,否则输出2

样例输入

6

样例输出

2

提示

input output
3 1

标程:

#include<cstdio>
#include<cstring>
const int maxn=2005;
int SG[maxn];
bool vis[maxn];

void sg()
{
    memset(SG, 0, sizeof(SG));
    SG[1] = 1; SG[2] = 1; SG[3] = 1;
    for (int i = 4; i < maxn; i++)
    {
        memset (vis, 0, sizeof(vis));
        for (int j = 2; j < i; j++)
        {
            if ((i-j-1 < 2)) vis[SG[j-2]^0] = true;
            else vis[SG[j-2]^SG[i-j-1-2]] = true;
        }
        for (int j = 0; ; j++)
            if (!vis[j]) {SG[i] = j ; break;}
    }
}

int main ()
{
    sg();
    int n;
    scanf("%d", &n);
    if (SG[n]) puts("1"); else puts("2");
    return 0;
}

发表评论

邮箱地址不会被公开。 必填项已用*标注