• NOIP 2014 螺旋矩阵


    NOIP 2014 螺旋矩阵

    洛谷传送门

    JDOJ传送门

    Description

    一个 n行 n列的螺旋矩阵可由如下方法生成:

    从矩阵的左上角(第 1行第 1列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入 1, 2, 3, ... , n2,便构成了一个螺旋矩阵。

    下图是一个 n = 4时的螺旋矩阵。
    img

    现给出矩阵大小 n以及 i和 j,请你求出该矩阵中第 i行第 j列的数是多少。

    Input

    输入共一行,包含三个整数 n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。

    Output

    输出共一行,包含一个整数,表示相应矩阵中第 i行第 j列的数。

    Sample Input

    4 2 3

    Sample Output

    14

    HINT

    【数据说明】
    对于 50%的数据,1 ≤ n ≤ 100;
    对于 100%的数据,1 ≤ n ≤ 30,000,1 ≤ i ≤ n,1 ≤ j ≤ n。

    最优解声明:

    题解:

    方法:

    依题意模拟:50pts.

    递归剥离层数:100pts

    数据加强到10^9之后,不可做

    思考(O(1))解法。

    至于(O(1))解法,会在数据加强版的博客中详细讲解。

    螺旋矩阵数据加强版

    在这里递归就完全可以水过。递归好想又好写。

    代码:

    #include<bits/stdc++.h>
    #define R register 
    using namespace std;
    inline void in(int &x) 
    {
        int f=1;x=0;char s=getchar();
        while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
        while(isdigit(s)){x=x*10+s-'0';s=getchar();}
        x*=f;
    }
    int n,x,y,ans;
    int main()
    {
        in(n),in(x),in(y);
        here:;
        if(x==1)
    		printf("%d",y+ans);
        else if(y==n)
    		printf("%d",n+x-1+ans);
        else if(x==n)
    		printf("%d",3*n-y-1+ans);
        else if(y==1)
    		printf("%d",4*n-x-2+ans);
        else
        {
            ans+=4*n-4;
            x--,y--,n-=2;
            goto here;
        }
    	return 0;
    }
    
  • 相关阅读:
    sqoop常用命令三 ---- import导入 与export 覆盖更新,常见问题总结
    Sqoop 数据导出:全量、增量、更新
    idea 安装热部署插件
    Python学习之turtle绘图篇
    使用python自动画一只小猪佩奇(源码)
    Python turtle安装和使用教程
    PYCHARM三方库安装方法
    Impala编译部署-3
    SSLv3 SSLContext not available Tomcat
    SSLv3 SSLContext not available Tomcat
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13869536.html
Copyright © 2020-2023  润新知