【NOIP2014 普及组】螺旋矩阵
【NOIP2014 普及组】螺旋矩阵
一、题目
【NOIP2014 普及组】螺旋矩阵
时间限制: 1 Sec 内存限制: 128 MB
提交: 18 解决: 0
[提交][状态][讨论版]
题目描述
一个n行n列的螺旋矩阵可由如下方法生成:
从矩阵的左上角(第1行第1列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1, 2, 3, ... , n,便构成了一个螺旋矩阵。2
下图是一个n = 4 时的螺旋矩阵。
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
现给出矩阵大小n以及i和j,请你求出该矩阵中第i行第j列的数是多少。
输入
输入共一行,包含三个整数 n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。
输出
输出共一行,包含一个整数,表示相应矩阵中第i行第j列的数。
样例输入
4 2 3
样例输出
14
提示
【数据说明】
对于50%的数据,1 ≤ n ≤
100;
对于100%的数据,1 ≤ n ≤
30,000,1
≤ i ≤ n,1
≤ j ≤ n。
二、分析及代码
【题解】
首先,本题有两种思路。
1.老老实实填数组。(此方法简单易懂,但当矩阵过大时,就会出现数组开不够大,或long long也不够的情况)
2. 用算法找规律,但规律不是一般的难找。我就简单说说我找到的规律。
|
1 |
2 |
3 |
4 |
|
12 |
13 |
14 |
5 |
|
11 |
16 |
15 |
6 |
|
10 |
9 |
8 |
7 |
|
1 |
2 |
|
4 |
3 |
首先对比两表,你就会发现下表就是上表中间四格每个减去12,正好就是外圈12个数中最大的;
而12就是外圈边长的4倍减4;
于是,就成了这样
|
1 |
2 |
3 |
4 |
|
12 |
1 |
2 |
5 |
|
11 |
3 |
4 |
6 |
|
10 |
9 |
8 |
7 |
红色是内圈,黑色是外圈
红色基数为12,黑色基数为0
同时,每一圈最上方的一行就是i+j-1的值。
最右方的一列就是i+j-1的值。
最下方的一行就是4n-i-j-1的值。
最左方的一列就是4n-i-j-1的值。
(一定要记得加上外圈基数哦!)
DP思路
状态:
用f[n][i][j]表示n阶方块i,j位置的值。
对于外圈的:
i表示列,j表示行
if(i>=j)
f[n][i][j]= i+j-1
if(i<j)
f[n][i][j]= 4n-i-j-1
对于内圈:
f[n][i][j]= f[n-2][i-1][j-1]+n*n-(n-2)*(n-2);
初始状态:
f[1][1][1]=1
f[2][1][1]=1
f[2][2][1]=2
f[2][2][2]=3
f[2][1][2]=4
外圈表示:
if(j==1||i==1||j==n||i==n)
内圈表示:
i>1&&i<n&&j>1&&j<n
代码
#include <iostream>
using namespace std;
int i=,j=,n=;
void luo(int n1)
{
int a=,k,l;
for (l=;l<n1;l++)
{
a=a+n*-l*+;
}
if (i>=j) printf ("%d",a+i+j-*n1+);
else printf ("%d",a+(n-*n1+)*-i-j+n1+n1+);
}
int main()
{
freopen("in2.txt","r",stdin);
int i1,j1;
scanf ("%d %d %d",&n,&j,&i);
//cout<<n<<j<<i;
i1=i;
j1=j;
if (i1>n/) i1=n-i1+;
if (j1>n/) j1=n-j1+;
if(i1>j1) luo(j1);
else luo(i1);
}
【NOIP2014 普及组】螺旋矩阵的更多相关文章
- [NOIP2014] 普及组
珠心算测验 模拟. 将所有“两个不同数之和”装进桶里,扫描原数组记录满足条件的数的个数. /*by SilverN*/ #include<iostream> #include<alg ...
- 螺旋矩阵 noip2014普及组
本题可以直接模拟填数字,也可以直接计算结果. 代码一:(这个代码,缺陷在于数组太大,浪费内存啊.另外,循环次数也不少.总之,时间空间的消耗都不小.) /*======================= ...
- noip2014普及组——珠心算测验
题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师采用一种快速考察珠 ...
- [NOIP2014普及组]子矩阵
题目:洛谷P2258.Vijos P1914.codevs 3904. 题目大意:给你一个矩阵,要你找一个r行c列的子矩阵,求最小分值(子矩阵和分值的定义见原题). 解题思路:n和m比较小,考虑暴力. ...
- noip2014普及组 比例简化
题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有1498 人,反对的有 902人,那么赞同与反对的比例可以简单的记为1498:902. 不过,如 ...
- [NOIP2014普及组T1]珠心算测验 - NTT
求数组有多少个数,恰好等于集合中另外两个(不同的)数之和? 注意到数集比较小,而且涉及到下标的加法,可以很自然地想到卷积 注意减去自己加自己的贡献 真是一道NTT练手好题 #include <i ...
- NOIP 2014 普及组 T3 螺旋矩阵
[题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...
- NOIP2014-普及组复赛-第三题-螺旋矩阵
题目描述 Description 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵 ...
- 【模拟】[NOIP2014]螺旋矩阵[c++]
题目描述 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵中所有格子.根据经过顺序 ...
随机推荐
- hctf2016 fheap学习(FreeBuf发表的官方解法)
目录 如何在二次释放前修改函数指针 修改函数指针流程 如何获得进程的加载基址 puts函数的调用 如何获取system函数地址 说一下用DlyELF函数 如何调用system函数 ROP需要的栈布局 ...
- Delphi重定义的消息结构
// 除去DDE和MDI消息,一共159个消息,其中部分消息仅仅的转定义 // 普通消息,有两个参数和结果 PMessage = ^TMessage; TMessage = packed record ...
- jQuery中删除节点方法remove()、detach()、empty()分析
jQuery中提供了三种删除节点的方法:remove().detach().empty(),本文详细分析这三种方法. 最容易区分的是empty(),该方法严格上属于“清空节点”,即删除其子节点,自身并 ...
- 010-spring事务管理
一.Spring的事务传播行为 事务是从哪里传播到哪里? 是从方法A传播至方法B. Spring事务类型详解: PROPAGATION_REQUIRED--如果当前没有事务,就新建一个事务.如果有,就 ...
- SUBMIT RM07DOCS【MB51】 获取返回清单,抓取标准报表数据
*&---------------------------------------------------------------------* *& Report YT_SUBMIT ...
- orange安装文档
一.Orange简介 Orange是一个基于 OpenResty/Nginx 的 API Gateway,提供 API 及 “自定义规则” 的监控和管理,如访问统计.流量切分.AB 测试.API ...
- C# 函数2
//读写INI public class GF_INI { [DllImport("kernel32")] private stat ...
- BigDecimal类型、Long类型判断值是否相等,以及BigDecimal加减乘除
//Long是需要比较精度的,所以要用longValueif(project.getFriendId().longValue() != friendId.longValue()) { return t ...
- 美图秀秀 web开发图片编辑器
美图秀秀web开发平台 http://open.web.meitu.com/wiki/ 1.环境配置 1.1.设置crossdomain.xml 下载crossdomain.xml文件,把解压出来的c ...
- ES6 随记(1)-- let 与 const
1. const(声明一个只读的常量) 这个是很好理解的,且声明时就必须赋值而不能以后再赋,不然会报错. 而个人认为它最大的用处还是在于 {} 和 [] 上,const 保证了它的内存地址(指针)不变 ...