URAL 1051 Simple Game on a Grid

URAL_1051

    这个题目基本算是YY出来的,具体也没有去证明。

    由于N和M可能比较大,于是就想如何将其变成小一点矩阵去考虑,这时发现3*x(x>=2)的矩阵有一个特性,可以变成3*(x-1)的矩阵,利用这个特性,我们可以将N*M(N,M>=3)的矩阵变成3*3、3*4、3*5、4*4、4*5、5*5之中的一个(因为可以通过一定的手段让x*y的矩阵变成(x-3)*y的矩阵,有个前提就是y>=3,至于怎么搞还是留给大家做思考吧,就不多说了),这样只要考虑有限个矩阵的情况就可以得到最后的结果了(不过我没有证明变成这样会不会使结果更差)。

    画一下就可以得到3*3、3*4、3*5最后只能变成2个,而4*4、4*5、5*5最后可以变成1个。

    接下来还要讨论一下2*x和1*x的情况,对于2*x(x>=4)也可以得到一个特性,即可以变成2*(x-3)的矩阵。

#include<stdio.h>

#include<string.h>

void swap(int &x, int &y)

{

    int t;

    t = x, x = y, y = t;

}

int main()

{

    int x, y;

    while(scanf("%d%d", &x, &y) == 2)

    {

        if(x > y)

            swap(x, y);

        if(x == 1)

            printf("%d\n", y / 2 + (y % 2 ? 1 : 0));

        else if(x == 2)

        {

            y %= 3;

            printf("%d\n", y ? 1 : 2);

        }

        else

        {

            x = x % 3 + 3, y = y % 3 + 3;

            if(x > y)

                swap(x, y);

            printf("%d\n", x == 3 ? 2 : 1);

        }

    }

    return 0;

}

你可能感兴趣的:(simple)