螺旋矩阵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- ...
随机推荐
- @topcoder - SRM766R1 D1L3@ ShortestMissingSubsequences
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个大小为 G 的字符集,并给定一个长度为 N 的字符串 A ...
- 仔细看看Javascript中的逻辑与(&&)和逻辑或(||)
学过Java和C的人,都知道逻辑与(&&)和逻辑或(||),他们都是短路运算符,也就是说,对于&&来说,只要左边的操作数是false,它就不会再去判断右边的操作数是tr ...
- Python sorted
sorted函数: iterable:是可迭代类型;cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一 ...
- 2019-1-16-win10-uwp-发布的时候-ILC-编译不通过
title author date CreateTime categories win10 uwp 发布的时候 ILC 编译不通过 lindexi 2019-1-16 20:37:5 +0800 20 ...
- 【批量添加】-拼接sql字符串 标签: 批量添加 2015-12-13 17:49 2070人阅读 评论(33)
现在做的一个项目需要用到批量添加,但是封装的底层没有这个方法,所以自食其力,自己来写.我们用的是拼接sql字符串的方法来实现功能. 具体实现流程:首先将需要的数据存储到实体的list中,然后将这个li ...
- SQL注入原理讲解,很不错!
SQL注入原理讲解,很不错! 原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html 1.1.1 摘要 日前,国内最大的程序员 ...
- Istio on ACK集成生态(1): 集成TSDB助力可观测性存储
阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考文档在ACK上部署使用Isito.Istio on ACK提供了丰富的监控能力,为网格中的服务收集遥测数据,其中Mixe ...
- 模板—插头dp(Ural 1519 Formula 1)
括号表示法: 据说比下一个要快而且灵活. #include<iostream> #include<cstring> #include<cstdio> #define ...
- python特性(八):生成器对象的send方法
生成器对象是一个迭代器.但是它比迭代器对象多了一些方法,它们包括send方法,throw方法和close方法.这些方法,主要是用于外部与生成器对象的交互.本文先介绍send方法. send方法有一个参 ...
- win10访问Microsoft数据库问题总结
今天突然接到任务 把15年的一个wpf项目倒腾出来,根据客户要求微调界面效果 翻扯项目历史记录,找到最后一版的项目,不过历经三载,开发时的环境和现在的环境略有差距 原来:win7 64位 vs20 ...
