SYCOJ246螺旋矩阵
noip201403螺旋矩阵【普及组】数学算法 - 大本营 - 博客园 (cnblogs.com)
以下为搬运代码。一个为算圈数,另外一个是数学方法
思路如下:
1.输入n>>a>>b;
2.用一个循环缩小范围求出a,b所示的数所在的圈数q;
3.再一个循环求出圈数q的第1个数的值sum;
4.用四个if判断a,b所示的数在本圈q的上或下或左或右;
5.根据位置求出t(在sum的基础上需要+的值)
6.输出<<sum+t;
代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include <iostream>using namespace std;int main(int argc, char *argv[]){ int n,a,b,i,j,q=0,sum=1,t,l; cin>>n>>a>>b; for(i=1;i<=n;i++) if(a>=i&&a<=n-i+1&&b>=i&&b<=n-i+1) q++; else break; l=n+2; for(i=1;i<=q-1;i++) { l=n-2*(i-1); sum=sum+4*(l-1); } l=l-2; if(a==q) t=b-(q-1)-1; if(b==n-(q-1)) t=a-(q-1)-1+(l-1); if(a==n-(q-1)) t=n-(q-1)-b+(l-1)*2; if(b==q&&a!=q) t=n-(q-1)-a+(l-1)*3; cout<<sum+t; system("pause"); return 0;} |
以上方法摘自码酷
2016.7.9更新更加简单的代码,自己做的,时间复杂度O(1),空间复杂度O(1)。以下是代码:
思路(简单说):注意到矩阵是正方形的,因此可以寻找以矩阵中心点为中心的一个最小的子正方形矩阵,要包含准备查找的那个数(说明这个数一定在子矩阵的边界上),把子矩阵外的格子数量算出来,然后在子矩阵的四条边界上找这个点的位置,即可最多只遍历一圈就找到格子的位置。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include<iostream>using namespace std;int n,x,y;int main(){ scanf("%d%d%d",&n,&x,&y); int t=min(x-1,y-1); t=min(t,n-x); t=min(t,n-y); int matrix=n-t*2; int sum=n*n-matrix*matrix; if(x==t+1) printf("%d",sum+y-t); else if(y==t+matrix) printf("%d",sum+matrix+x-(t+1)); else if(x==t+matrix) printf("%d",sum+matrix*2-1+(t+matrix)-y); else if(y==t+1) printf("%d",sum+matrix*3-2+(t+matrix)-x); system("pause"); return 0;} |
SYCOJ246螺旋矩阵的更多相关文章
- PAT 1050. 螺旋矩阵(25)
本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...
- leetcode-Spiral Matrix II 螺旋矩阵2之python大法好,四行就搞定,你敢信?
Spiral Matrix II 螺旋矩阵 Given an integer n, generate a square matrix filled with elements from 1 to n2 ...
- Java-基础编程(螺旋矩阵&乘法表)
package cn.rick.study; import java.io.BufferedReader;import java.io.InputStreamReader;import java.ut ...
- NOIP 2014 普及组 T3 螺旋矩阵
[题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...
- PAT-乙级-1050. 螺旋矩阵(25)
1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...
- NOIP2014-普及组复赛-第三题-螺旋矩阵
题目描述 Description 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵 ...
- LeetCode 59. Spiral Matrix II (螺旋矩阵之二)
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...
- LeetCode 54. Spiral Matrix(螺旋矩阵)
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- Code Kata:螺旋矩阵 javascript实现
1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 如图所示,就是一个5*5的螺旋矩阵 我的思路如下: 第一步:拆分 ...
随机推荐
- 分布式事务之TCC事务模型
一.引言 在上篇文章<老生常谈--利用消息队列处理分布式事务>一文中留了一个坑,今天来填坑.如下图所示 如果服务A和服务B之间是同步调用,比如服务C需要按流程调服务A和服务B,服务A和服务 ...
- Firebug: Net Panel 使用详解
Introduction to Firebug: Net Panel Since there is not much user documentation related to Firebug fea ...
- 转:Java IO
转自:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html [案例1]创建一个新文件 ? 1 2 3 4 5 6 7 8 ...
- Notepad++ 常用功能:批量取消替换换行、强制刷新数据
批量取消替换换行 换行批量替换成空格 Ctrl+F 打开查找替换窗口,使用:\r\n 替换成 空格,全部替换 强制刷新数据源,重新加载数据 快捷键:Ctrl+R 或者 Alt+F 然后 L 或者点击菜 ...
- CF764B Timofey and cubes 题解
Content 有一个序列 \(a_1,a_2,a_3,...,a_n\),对于 \(i\in[1,n]\),只要 \(i\leqslant n-i+1\),就把闭区间 \([i,n-i+1]\) 内 ...
- CF1006B Polycarp's Practice 题解
Content 给定一个长度为 \(n\) 的数列,试将其分成 \(k\) 段,使得每一段中的最大值的和最大. 数据范围:\(1\leqslant k,n,a_i\leqslant 2000\). S ...
- win10使用cmake编译libevent(解决依赖openssl)
概述 win10没有安装openssl cmake version: 3.18 libevent version: 2.1.10-stable libevent目前的版本中写好了 CMakeLists ...
- 【LeetCode】221. Maximal Square 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址: https://leet ...
- git安装与使用,未完待续... ...
目录 一.git概念 二.git简史 三.git的安装 四.git结构 五.代码托管中心-本地库和远程库的交互方式 六.初始化本地仓库 七.git常用命令 1.add和commit命令 2.sta ...
- Mysql数据库体系
Mysql数据库体系如下(手绘): 描述: 1.DBMS:database system management是数据库管理软件,平时我们使用的数据库的全称,是C/S架构(client/server)工 ...