zoukankan      html  css  js  c++  java
  • 【洛谷p2239】螺旋矩阵

    关于题前废话:

    这道题的数据范围过于强大了qwq,显然如果我们开一个30000*30000的二维数组来模拟,显然首先就开不下这么大的数组,然后暴力搜索的话也会爆掉,所以直接模拟显然是一个不正确的选择(当然直接模拟可以用作骗分大法)


    既然数据那么大,显然一定是有数学规律的(要不然这道题我们没法做),所以我们可以尝试找一下规律:

    观察矩阵:

    (暗中观察:ych)

    首先可以知道的是,当i==1时(也就是在第一行),对应的值就是j所对应的值。

    当i==n时,所对应的值就是3*n-2-j+1;(3*n-2表示的是第n行最左边的数的值,-j+1也就是第j行的值)

    当j==1时,所对应的值是4*n-2-i;

    当j==n时,对应的值是n+x-1;

    然后对于这个很多很多层的矩阵,我们可以对其进行抽丝剥茧(就像洋葱一层一层剥开矩阵的心),每剥开一层,n-2,所要求的点相对于新矩阵的行列坐标分别-1,同时值+4*n-4;

    于是我们用很短的代码就可以AC啦:

    CODE:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int n,i,j;
    
    int dg(int n,int x,int y){
        if(x==1) return y;
        if(x==n) return 3*n-1-y;
        if(y==n) return n+x-1;
        if(y==1) return 4*n-2-x;
        return dg(n-2,x-1,y-1)+4*n-4;
    }
    
    int main(){
        scanf("%d %d %d",&n,&i,&j);
        cout<<dg(n,i,j);
    }

    end-

  • 相关阅读:
    jQuery事件
    jQuery的效果
    jQuery 选择器
    中级 jQuery 了解
    回调函数 callback()
    预加载
    表格对象的方法
    script中type属性讲解
    将数据渲染到页面的方式:模版
    将数据渲染到页面的几种方式
  • 原文地址:https://www.cnblogs.com/zhuier-xquan/p/11051022.html
Copyright © 2011-2022 走看看