螺旋矩阵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- ...
随机推荐
- Hibernate中的Session对象 标签: hibernatesession 2017-01-22 22:10 238人阅读 评论(
Hibernate中的Session 大家在看hibernate视频的时候一定都发现了,每次要操作数据库,总是要新建一个session对象,Hibernate在对资料库进行操作之前,必须先取得Sess ...
- 使用Data Lake Analytics从OSS清洗数据到AnalyticDB
前提 必须是同一阿里云region的Data Lake Analytics(DLA)到AnalyticDB的才能进行清洗操作: 开通并初始化了该region的DLA服务: 开通并购买了Analytic ...
- (译)Objective-C的动态特性
这是一篇译文,原文在此,上一篇文章就是受这篇文章启发,这次干脆都翻译过来. 过去的几年中涌现了大量的Objective-C开发者.有些是从动态语言转过来的,比如Ruby或Python,有些是从强类型 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十二章:几何着色器(The Geometry Shader)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十二章:几何着色器(The Geometry Shader) 代码工 ...
- java把Word文件转成html的字符串返回出去
1.需求是把前端上传的word文件解析出来,生成html的字符串返回给前端去展示,Word里面的图片可以忽略不显示,所以这段代码去掉了解析图片的代码 package com.lieni.core.ut ...
- @codeforces - 718E@ Matvey's Birthday
目录 @description@ @solution@ @accepted code@ @detail@ @description@ 给定一个长度为 n 的字符串 s,保证只包含前 8 个小写字母 ' ...
- 【LeetCode】90.Subsets II
Subsets II Given a collection of integers that might contain duplicates, nums, return all possible s ...
- vim删除行
0,vim filename 1,显示行号 :set number 2,跳转到第1000行 1000G (跳转到文件末尾:“G”) 3,删除1-1000行 :1,.d 4,删除所有行 先跳转到文件最后 ...
- hdu 1950 最长上升子序列(lis) nlogn算法【dp】
这个博客说的已经很好了.http://blog.csdn.net/shuangde800/article/details/7474903 简单记录一下自己学的: 问题就是求一个数列最长上升子序列的长度 ...
- part10.2-字符设备驱动模型
