传送门

洛谷2239

•题意

从矩阵的左上角(第11行第11列)出发,初始时向右移动;

如果前方是未曾经过的格子,则继续前进,否则右转;

重复上述操作直至经过矩阵中所有格子。

根据经过顺序,在格子中依次填入$1,2,3...n$ 构成一个螺旋矩阵

现给出矩阵大小$n$以及$i$和$j$,请你求出该矩阵中$(i,j)$的数是多少。

•思路

这里主要是记录一下$O(1)$的想法,为了防止忘记着重记录一下

①计算圈数:

可以把整个矩阵从中心分成四份,分别是左上,右上,左下,右下

可以把其他三个小矩阵对称到左上矩阵去,

为什么是左上矩阵呢,因为从(1,1)开始使得其$x,y$坐标符合 $min(x,y)=$圈数

得出圈数后根据圈数找位置就比较轻松了

容易发现

第1圈数字个数    第2圈数字个数     第3圈数字个数  ...  第$x$圈数字个数

$4(n-1)$    $4(n-3)$    $4(n-5)$        ...   $4(n-2x+1)$

再观察每一圈第一个位置

$(1,1) \ ,\ (2,2) \ ,\ (3,3),....$

可以观察到每一圈的前$1/2$个(上半部分) 随着螺旋矩阵后一个数,$(x+y)$增加$1$,如图

所以在上半部分第$q$圈第$num$个也就是从$1$到$(i,j)$个的值,

因为圈数是等差数列,所以利用等差数列求和公式可以得到

前面有外面的圈数+这一圈的$num=y+x-2*q+1$个数

就是 $\frac{(4(n-1)+4(n-2(q-1)+1))(q-1)}{2}+num$

在下部分随着螺旋矩阵方向,$(x+y)$逐渐减$1$,

所以,前$q-1$圈的总数+$num=$第$q$圈$-(x+y-2*q)+1$

就是$\frac{(4(n-1)+4(n-2q+1))q}{2}-num$

•代码

 #include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+;
int main()
{
int n,x,y;
while(cin>>n>>x>>y)
{
int q=min(min(x,y),min(n-x+,n-y+));///圈数 int num;
if(x==y==q)
num=;
else if(y>x)///上半部分
num=y+x-*q+;
else///下半部分
num=*(n-*q+)-(x+y-*q)+;
cout<<*((n-)+(n-*(q-)+))*(q-)+num<<endl;
}
}

螺旋矩阵O(1)根据坐标求值的更多相关文章

  1. MATLAB中求矩阵非零元的坐标

    MATLAB中求矩阵非零元的坐标: 方法1: index=find(a); [i,j]=ind2sub(size(a),index); disp([i,j]) 方法2: [i,j]=find(a> ...

  2. c编程:求出4&#215;4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。

    //求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max, ...

  3. NYOJ——301递推求值(矩阵快速幂)

    递推求值 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n)的 ...

  4. NOIP 2014 普及组 T3 螺旋矩阵

    [题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...

  5. PHP实现螺旋矩阵(螺旋数组)

    今天碰到一个比较有意思的问题, 就是把A到Y这25个字母以下面的形式输出出来 A B C D E P Q R S F O X Y T G N W V U H M L K J I 问题很有意思,就是转圈 ...

  6. 【模拟】[NOIP2014]螺旋矩阵[c++]

    题目描述 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵中所有格子.根据经过顺序 ...

  7. 【LeetCode-面试算法经典-Java实现】【059-Spiral Matrix II(螺旋矩阵II)】

    [059-Spiral Matrix II(螺旋矩阵II)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given an integer n, generate a ...

  8. PAT 1105 Spiral Matrix[模拟][螺旋矩阵][难]

    1105 Spiral Matrix(25 分) This time your job is to fill a sequence of N positive integers into a spir ...

  9. PAT——1050. 螺旋矩阵

    本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m- ...

随机推荐

  1. QT QSettings读写配置文件

    QT QSettings读写配置文件 需要用一个配置文件来保存程序的初始值,同时也需要做保存修改后的值. 那么借助于QSetting 就可以达到目的. 注意,生成的是 ini 文件! //1.创建和读 ...

  2. hdu 3466 01背包变形【背包dp】

    http://acm.hdu.edu.cn/showproblem.php?pid=3466 有两个物品P,Q,V分别为 3 5 6, 5 10 5,如果先dp第一个再dp第二个,背包容量至少要为3+ ...

  3. oracle显示和设置环境变量

    概述:可以用来控制输出的各种格式. (1)linesize  用于控制每行显示多少个字符,默认80个字符. 基本用法:set linesize 字符数 aql>show linesize sql ...

  4. QT_OPENGL-------- 4.可编程管线绘制三角形

    一.环境:qt下qmake编译首先在qt .pro文件中添加glew和glfw的链接 LIBS+= -L/usr/lib64 -lGLEW LIBS +=-L/usr/local/lib -lglfw ...

  5. ACK容器服务发布virtual node addon,快速部署虚拟节点提升集群弹性能力

    在上一篇博文中(https://yq.aliyun.com/articles/647119),我们展示了如何手动执行yaml文件给Kubernetes集群添加虚拟节点,然而,手动执行的方式用户体验并不 ...

  6. shell学习(15)- eval及shell No such file or directory解决办法

    eval可以读取一连串的参数,然后按照参数特性来执行.参数数目不限,彼此之间用分号隔开. eval会对后面的命令进行两遍扫描,如果第一遍扫描后,命令是个普通命令,则执行此命令:如果命令中含有变量的间接 ...

  7. ES6对象的super关键字

    super是es6新出的关键字,它既可以当作函数使用,也可以当作对象使用,两种使用方法不尽相同 1.super用作函数使用的时候,代表父类的构造函数,es6规定在子类中使用this之前必须先执行一次s ...

  8. Spring data jpa hibernate:查询异常java.sql.SQLException: Column '列名' not found

    使用spring boot,jap,hibernate不小心的错误: java.sql.SQLException: Column '列名' not found: 这句话的意思是:找不到此列 为什么会出 ...

  9. 一维数组的求平均成绩 Day06

    package com.sxt.arraytest1; /* * 求班里学生的平均成绩,以及成绩的综合 输出每个同学的成绩 */ import java.util.Arrays; import jav ...

  10. python 字典推导式