zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    关于if和else和switch case的用法和程序编码操作过程
    关于java的特点
    关于JAVA的数据类型
    关于java的学习
    力扣482. 密钥字符串 S python--每天一题
  • 原文地址:https://www.cnblogs.com/staginner/p/2487260.html
Copyright © 2011-2022 走看看