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

    仍然没从昨天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
    ",start);
                return 0;
            }start++;
        }
        for(int i=round+1;i<=n-round+1;i++){
            if(i==a&&n-round+1==b){
                printf("%d
    ",start);
                return 0;
            }start++;
        }
        for(int i=n-round;i>=round;i--){
            if(n-round+1==a&&i==b){
                printf("%d
    ",start);
                return 0;
            }start++;
        }
        for(int i=n-round;i>=round+1;i--){
            if(i==a&&round==b){
                printf("%d
    ",start);
                return 0;
            }start++;
        }
    }

    van♂shit

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

    屠龙宝刀点击送

  • 相关阅读:
    CentOS 6.5 zabbix 3.0.4 乱码问题
    CentOS-6.5安装zabbix 3.0.4
    NFS工作原理及配置文件详解
    CentOS-6.5-NFS部署
    Swift中简单的单例设计
    UITableViewCell实现3D缩放动画
    Swift
    Swift
    [转]Swift编程风格指南
    pch文件出现no such file or directory错误
  • 原文地址:https://www.cnblogs.com/648-233/p/11049638.html
Copyright © 2011-2022 走看看