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;
}

 

posted @ 2019-06-19 14:07  晔子  阅读(316)  评论(0编辑  收藏  举报