【螺旋矩阵】
题目描述

本质上这题是一道纯粹的数学题,n阶矩阵,按蛇形螺旋矩阵方向顺时针填好1~n^2的所有数字后,然后求矩阵任意一个第i行第j列的位置的数字。

通过找规律,可以直接找出计算公式,在O(1)的时间内给出结果。
将矩阵由外到内,看做是一层一层包裹起来的形状,类似洋葱头一样。

首先观察每一层的边长的变化规律,以及每一层左上角起点位置的数字规律

然后对于给定的坐标(i, j),首先判断出这个点在某第k层,
k=min(i, j, n-j+1, n-i+1)

然后计算其与所在层的左上角起点坐标(k,k)的距离,然后结合起点坐标(k,k)的数字,即可推算出其对于的数字了。

分两种情况讨论一下。
1、当该点在某第k层的上半角时。

如上图所示,此刻(i, j)满足的条件是i==k,或者j=n-k+1,这种情况下,(i,j)位置的数字就等于起点坐标(k,k)的数字f(k)加上(i,j)到(k,k)的距离,i-k+j-k,即从起点开始顺时针走了(i-k+j-k)步。

如果(i,j)在矩阵的下半角,此刻(i,j)满足的条件是j==k,或者i=n-k+1,此刻将起点转换一下,视右下角的点为起点,该点的坐标是(n-k+1, n-k+1),其数字是f(k)+2*(当前层的边长-1),即f(k)+2*(n-2*(k-1)-1),这样的话(i,j)坐标的数字是:
新的起点的数字:f(k)+2*(n-2*(k-1)-1),加上沿这个新起点顺时针向左向上游走到(i,j)走过的步数,abs(i-(n-k+1)) + abs(j-(n-k+1))。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int n, i, j, start;cin >> n >> i >> j;int k = min(min(min(i, j), (n-i+1)), (n-j+1));//定位在第k层start = 4 * (k - 1) * (n - k + 1) + 1;//第k层的起点对应的数字if(i==n-k+1||j==k){//如果在下半部分//将右下角当做起点,其数字是左上角的数字加上2*(当前层的边长-1)start += 2 * (n - 2 * (k - 1) - 1);//将右下角当做起点,其坐标是(n-k+1, n-k+1)k = n-k+1;}cout << start + abs(i - k) + abs(j - k);return 0;
}

除了这样直接算出,也可以通过循环的方式来计算得出,同样一层一层地往里找这个点,时间复杂度o(n)

#include<iostream>using namespace std;
//dfs(n, i, j)表示当前n阶的螺旋举矩阵当中坐标(i, j)处的数字
int dfs(int n, int i, int j){if(i==1) //如果位于当前矩阵的上边框,则直接返回jreturn j;else if(j==n)//如果位于当前矩阵的右边框,则数字是n+i-1return n+i-1;else if(i==n)//如果位于当前矩阵的下边框,则数字是1+3(n-1)-(j-1)=3n-j-1return 3*n-j-1;else if(j==1)//如果位于当前举证的左边框,则数字是1+3(n-1)+n-2-(i-2)=4n-i-2return 4*n-i-2;else //否则继续往里面的层找,将问题递归转换为求n-2阶矩阵中坐标(i-1, j-1)处的数字,再加上外圈周长4*(n-1)即可return dfs(n-2, i-1, j-1) + 4*(n-1);
}
int main()
{int n, i, j, start;cin >> n >> i >> j;cout << dfs(n, i, j) << endl;return 0;
}

NOIP-2014-J2-T3相关推荐

  1. NOIP 2014 Day1 T3飞扬的小鸟

    题目描述:http://codevs.cn/problem/3729/ 表示各种shabi的我编和调了半天,思路大体就是一个完全背包的模型,不过会多一些额外的转移(因为题目限制高度之类的),不过值得注 ...

  2. Noip 2014酱油记+简要题解

    好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...

  3. [ NOIP 2014 ] TG

    \(\\\) \(Day\ 1\) \(\\\) \(\#\ A\) \(Rps\) 定义五种方案的石头剪刀布游戏,两人共进行\(N\)局游戏,已知两人各自的循环节和具体方案,胜者得\(1\)分,败者 ...

  4. NOIP 2014 解方程

    描述 已知多项式方程: a0+a1x+a2x2+...+anxn=0 求这个方程在[1, m]内的整数解(n 和 m 均为正整数). 格式 输入格式 输入共 n+2 行. 第一行包含 2 个整数 n. ...

  5. NOIp 2014 #4 无线网络发射器选址 Label:模拟

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...

  6. NOIp 2014 #2 联合权值 Label:图论 !!!未AC

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  7. NOIP 2014 联合权值

    题目链接: https://www.luogu.org/problemnew/show/P1351 参考洛谷题解: 使用链式前向星储存图.如果使用深度优先搜索的话,是会超时的,如果遍历中间的点,虽然比 ...

  8. NOIp 2014 联合权值 By cellur925

    题目传送门 这题自己(真正)思考了很久(欣慰). (轻而易举)地发现这是一棵树后,打算从Dfs序中下功夫,推敲了很久规律,没看出来(太弱了). 开始手动枚举距离为2的情况,模模糊糊有了一些概念,但没有 ...

  9. UOJ 265 NOIP 2016 DAY2 T3 浅谈预处理状态压缩动态规划

    世界真的很大 要是当年我会一点状压该多好.. 虽然现在我状压也很差,但是还是把这道题水出来了 马上要NOIP2017了,抓紧调整状态才好 看题先: description Kiana 最近沉迷于一款神 ...

  10. NOIP 2014 飞扬的小鸟

    描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告 ...

最新文章

  1. 尴尬!嫌疑人以为警察不懂技术偷删代码,不料被当场识破
  2. 2012腾讯春季实习生面试经历(一)
  3. hadoop python入门_MRJob 极速入门,Python玩转Hadoop你会么?
  4. 4.1.3 文件目录
  5. mac系统及xcode使用的SVN客户端安装升级
  6. MySQL(介绍,安装,密码操作,权限表)
  7. java 读取csv_Java读取CSV的常用方法 | 学步园
  8. 【C++深度剖析教程33】C++中的构造函数与析构函数是否可以为虚函数
  9. java - 判断任意一天是这年的第几天
  10. 收藏 | 深度学习框架简史:TensorFlow和PyTorch双头垄断
  11. iPhone 13 Pro 成本价曝光,不到4000元
  12. 自定义配置节 Section
  13. 每天一道面试题(2):实现strncpy
  14. linux系统TongLinkQ安装部署手册
  15. Java程序员月薪20k的涨薪秘籍,系列教学
  16. 教育部重磅文件:2020年起取消自主招生,推出强基计划
  17. ISA防火墙策略配置以及服务器的发布
  18. linux怎么用命令上传本地文件,Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件...
  19. 关于Python列表解析式以及初始化指定size列表
  20. sap采购定价过程配置

热门文章

  1. Python进行微信公众号开发
  2. 虚拟机设置BT4上网
  3. Unity发布小游戏(五):小游戏的打包与上传到CCD云服务器
  4. PAMI19 - 强大的级联RCNN架构《Cascade R-CNN: High Quality Object Detection and Instance Segmentation》
  5. android9机型,安卓9正式定名Android 9 Pie,这些机型可以尝鲜
  6. 右上角的引用文献格式_论文要引用的小符号右上角怎么打?
  7. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android高级篇下)...
  8. 通过查看Qt助手(QtAssistant)了解并使用自己需要Qt库
  9. 14个程序员常去的外国网站
  10. %2d, %02d, %d的区别