zoukankan      html  css  js  c++  java
  • P2239 螺旋矩阵

    P2239 螺旋矩阵

    题解

    这题看上去是个暴力,但是你看数据范围啊,暴力会炸

    实际上这是一道数学题QWQ

    先看看螺旋矩阵是个什么亚子吧

    好吧,找找规律

    1 2 ... ... ... ... ... n
    4(n-1) 4(n-1)+1         4(n-1)+n n+1
    ...             ...
                  ...
                  ...
    ...             ...
    ... 4(n-1)+(3n-2)         4(n-1)+(2n-1) ...
    3n-2 ...         ... 2n-1

     这个矩阵可以划分成一圈一圈的亚子

    所以就可以像剥洋葱一样一层一层的处理

    如果这个位置在边界(也就是在圈上),找规律直接求解

    如果在内部的话,我们就剥去一层,寻找下一层,反正总会到头的啊

    注意一下:

      剥去一层,n的规模就 -2 ,下一层统一比上一层小 4(n-1)

    代码

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int n,x,y;
    
    int dfs(int n,int i,int j)
    {
        if(i==1) return j;
        if(j==1) return 4*n-2-i;
        if(j==n) return n+i-1;
        if(i==n) return 3*n-1-j;
        else return dfs(n-2,i-1,j-1)+4*(n-1);
    }
    
    int main()
    {
        scanf("%d%d%d",&n,&x,&y);
        int ans;
        ans=dfs(n,x,y);
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    string subscript out of range
    基数树(radix tree)
    改进版的快速排序
    快速排序算法-C语言实现
    归并排序
    用数组名做函数参数(转)
    堆和栈的区别
    给指针malloc分配空间后就等于数组吗?
    codeblocks中添加-std=c99
    堆排序-C语言实现
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11050948.html
Copyright © 2011-2022 走看看