Magic of David Copperfield II(奇偶性)

题目大意:这是一个魔术游戏,首先把你的手指放在一个左上角的格子里面,然后魔术师说你可以移动K1步,移动完之后,他会删除一些方格,并且说,你肯定不在这里,删除的方格不可以再去了,然后让你再走K2步,继续删除一些格子,直到就剩下一个格子为止,魔术师就可以说抓住你了,输出每个Ki和删除的格子。

分析:比较明显的利用了奇偶性质,所以每次走奇数步的话就可以了,删除的格子可以从左下角开始,把相同奇偶性质的都给删除即可,注意数N<=K<300,当N等于100的时候,K只能从100开始.............

代码如下:

===========================================================================================================================

#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;

const int MAXN = 107;

int main()
{
    int i, j, N;
    vector<int> G[MAXN*2];

    scanf("%d", &N);

    for(i=1; i<=N; i++)
    for(j=1; j<=N; j++)
    {
        if(i+j-2 > N)
            G[N+3].push_back((i-1)*N+j);
        else
            G[i+j].push_back((i-1)*N+j);
    }

    int cnt = N;

    for(i=N+3; i>2; i--)
    {
        printf("%d", cnt);cnt = (cnt&1 ? cnt+2:cnt+1);
        for(j=0; j<G[i].size(); j++)
            printf(" %d", G[i][j]);
        printf("
");
    }

    return 0;
}
原文地址:https://www.cnblogs.com/liuxin13/p/4812876.html