螺旋矩阵O(1)根据坐标求值
洛谷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)根据坐标求值的更多相关文章
- MATLAB中求矩阵非零元的坐标
MATLAB中求矩阵非零元的坐标: 方法1: index=find(a); [i,j]=ind2sub(size(a),index); disp([i,j]) 方法2: [i,j]=find(a> ...
- c编程:求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。
//求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max, ...
- NYOJ——301递推求值(矩阵快速幂)
递推求值 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n)的 ...
- NOIP 2014 普及组 T3 螺旋矩阵
[题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...
- 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 问题很有意思,就是转圈 ...
- 【模拟】[NOIP2014]螺旋矩阵[c++]
题目描述 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵中所有格子.根据经过顺序 ...
- 【LeetCode-面试算法经典-Java实现】【059-Spiral Matrix II(螺旋矩阵II)】
[059-Spiral Matrix II(螺旋矩阵II)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given an integer n, generate a ...
- PAT 1105 Spiral Matrix[模拟][螺旋矩阵][难]
1105 Spiral Matrix(25 分) This time your job is to fill a sequence of N positive integers into a spir ...
- PAT——1050. 螺旋矩阵
本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m- ...
随机推荐
- 洛谷 P1505 [国家集训队]旅游 树链剖分
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例: 输出样例: 说明 思路 AC代码 总结 题面 题目链接 P1505 [国家集训队]旅游 题目描述 Ray 乐 ...
- codevs1506 传话
题目描述 Description 一个朋友网络,如果a认识b,那么如果a第一次收到某个消息,那么会把这个消息传给b,以及所有a认识的人. 如果a认识b,b不一定认识a. 所有人从1到n编号,给出所有“ ...
- JavaScript学习之setTimeout
<JavaScript权威指南>第四版中说“window对象方法setTimeout()用来安排一个JavaScript的代码段在将来的某个指定时间运行”. setTimeout(foo, ...
- MUI - myStorage在ios safari无痕浏览模式下的解决方案
myStorage在ios safari无痕浏览模式下的解决方案 今天看到了这个帖子LocalStorage 在 Private Browsing 下的一个限制, 吓尿了,如果用户开启了无痕浏览,ap ...
- TP3.2的URL重写省略index.php问题
1. 在tp3框架的配置文件里,明确指定了路由的格式,这个配置位于thinkPHP文件夹下的conf文件夹里的convention.php中,修改以下字段 'URL_MODEL' => 2, # ...
- 从入侵到变现——“黑洞”下的黑帽SEO分析
概述 由于互联网入口流量主要被搜索引擎占据,网站在搜索引擎中的排名直接影响到市场营销效果,因此SEO服务应运而生.SEO(Search Engine Optimization)全称为搜索引擎优化,是指 ...
- 微信小程序记录
1.vs code 可以安装 Vetur-wepy 对代码高亮的提示. 2.取消swiper组件的手动滑动效果 在 swiper-item 中添加 catchtouchmove='catchTouch ...
- Flask学习之三 web表单
本部分Miguel Grinberg教程的翻译地址:http://www.pythondoc.com/flask-mega-tutorial/webforms.html 开源中国的:http://ww ...
- Flask学习之二 模板
继续学习flask 本部分Miguel Grinberg教程的翻译地址:http://www.pythondoc.com/flask-mega-tutorial/templates.html 英文原文 ...
- This cache store does not support tagging.
用户权限管理系统 https://github.com/Zizaco/entrust 再添加角色的时候... 报了一个错.. BadMethodCallException in Repository. ...