首页 > 其他 > 详细

螺旋矩阵

时间:2019-06-19 11:16:50      阅读:111      评论:0      收藏:0      [点我收藏+]

仍然没从昨天WA的阴影中脱离出来

一道看似暴力就可以的暴力题

题目:

技术分享图片

数据范围:

技术分享图片

枚举是要炸的

那就推导些公式

某大佬的数学做法:

技术分享图片

技术分享图片

拿个矩阵行列式比划下:

1    2    3    4    5    6    7

24  25  26  27  28  29  8

23  40  41  42  43  30  9

22  39  48  49  44  31  10

21  38  47  46  45  32  11

20  37  36  35  34  33  12

19  18  17  16  15  14  13

拿到横纵坐标判断其所处之圈

并且预处理必要变量,比如每圈首项,每圈项数等

再推导下必要公式

圈数:

由玄学可知,圈数(以1开始)编号是由该点到边框的最短距离决定的

于是有:

min(啊,宅,n-啊+1,n-宅+1);

min(i,j,n-i+1,n-j+1);

每项项数就是小学数学,甚至不是小学奥数...

xiangshu=(n-(i(圈数)-1)*2-1)*4

求项数以后暴力枚举就好:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
int a,b;
int main(){
    scanf("%d%d%d",&n,&a,&b);
    int round=min(a,min(b,min(n-a+1,n-b+1)));
    int start=1;
    for(int i=1;i<=round-1;i++)
        start+=(n-(i-1)*2-1)*4;
    for(int i=round;i<=n-round+1;i++){
        if(round==a&&i==b){
            printf("%d\n",start);
            return 0;
        }start++;
    }
    for(int i=round+1;i<=n-round+1;i++){
        if(i==a&&n-round+1==b){
            printf("%d\n",start);
            return 0;
        }start++;
    }
    for(int i=n-round;i>=round;i--){
        if(n-round+1==a&&i==b){
            printf("%d\n",start);
            return 0;
        }start++;
    }
    for(int i=n-round;i>=round+1;i--){
        if(i==a&&round==b){
            printf("%d\n",start);
            return 0;
        }start++;
    }
}

van♂shit

技术分享图片

T2:回文日期(不知你们听不听)

屠龙宝刀点击送

螺旋矩阵

原文:https://www.cnblogs.com/648-233/p/11049638.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!