传送门

洛谷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. 跟我一起认识axure(三)

    交互设置,添加链接 点击预览

  2. Django1.11使用命令makemigrations提示No Changes

    在项目中,遇到models模型变动,变动后合并发生问题,故当时做了删除应用文件夹下migrations文件,由于数据库里无较多新数据,故删除后重建,但重建后执行模型合并操作结果为No Changes, ...

  3. HDU 5584 LCM Walk【搜索】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5584 题意: 分析: 这题比赛的时候卡了很久,一直在用数论的方法解决. 其实从终点往前推就可以发现, ...

  4. python 嵌套列表

  5. @topcoder - TCO19 Regional Wildcard Wildcard Round - D1L2@ Diophantine

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 令 p[] 为质数序列:p[0] = 2, p[1] = 3, ...

  6. Laravel 的HTTP控制器

    简介# 除了在路有文件中以闭包的形式定义所有的请求处理逻辑外,还可以使用控制器类来组织此类行为,控制器能够将相关 的请求处理逻辑组成的一个单独的类,控制器被存放在app/Http/Controller ...

  7. hdu 4128 Running relay (线性规划转半平面交)

    Problem - 4128 对偶线性规划转半平面交,这题的正解O(nlogn)解法,目前网上没有找到这样的正解. 原来的不等式组, sigma{-si*xi}>=-W+d*sigma{si} ...

  8. EF的多线程与分库架构设计实现(2)

    距离上次讲解EF6分库架构(https://www.cnblogs.com/gbat/p/6374607.html)实现已经过去2年了..上次发出来后,一直到现在依然有很多人陆陆续续的加我好友,问我要 ...

  9. Jupyter Magic - Timing(%%time %time %timeit)

    对于计时有两个十分有用的魔法命令:%%time 和 %timeit. 如果你有些代码运行地十分缓慢,而你想确定是否问题出在这里,这两个命令将会非常方便. 1.%%time 将会给出cell的代码运行一 ...

  10. AtCoder Beginner Contest 075 C Bridge(割边)

    求割边个数.Tarjan的板子.. #include <bits/stdc++.h> using namespace std; const int MAXN = 55; const int ...