洛谷 P2239 螺旋矩阵
来源:互联网 发布:mysql配置文件my.ini 编辑:程序博客网 时间:2024/05/09 18:10
题目描述
一个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列的数是多少。
(本题目为2014NOIP普及T3)
输入输出格式
输入格式:输入共一行,包含三个整数 n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。
输出格式:输出共一行,包含一个整数,表示相应矩阵中第i行第j列的数。
输入输出样例
输入样例#1:
4 2 3
输出样例#1:
14
说明
【数据说明】
对于50%的数据,1 ≤ n ≤ 100;
对于100%的数据,1 ≤ n ≤ 30,000,1 ≤ i ≤ n,1 ≤ j ≤ n。
又是一道一眼看上去就没有思路的题。。。
思路,先找出这个点在第几个‘口’中。
所以,‘口’的边长就是n-2*c+2。
可以推出‘口’个数是等差数列,前c-1个的个数就是自己推吧(我才不会告诉你代码里有)。
时间复杂度:O(1)。
最后,催促模拟.jpg。
#include<algorithm>#include<iostream>#include<cstdio>using namespace std;int n,x,y,c,ans;int main(){scanf("%d%d%d",&n,&x,&y);c=min(min(n-x+1,x),min(n-y+1,y));ans=4*(n-c+1)*(c-1);if(x==c)ans+=y-c+1;else if(y==n-c+1)ans+=n-3*c+x+2;else if(x==n-c+1)ans+=3*n-5*c-y+4;elseans+=4*n-7*c-x+5;printf("%d\n",ans);return 0;}
0 0
- 洛谷 P2239 螺旋矩阵
- 洛谷p2239 螺旋矩阵
- 【题解】2014 螺旋矩阵(P2239)
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵!
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵:)
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- java 单链表的逆置
- Linux多线程的同步与互斥
- Swoole数据库的使用
- 正则表达式——反向引用
- 一个诚实的软件下载网站
- 洛谷 P2239 螺旋矩阵
- C++时间函数用法总结(部分)
- 无缝滚动的实现
- 洛谷 P1078 文化之旅
- pip install error
- 不变的自己
- java 两个栈实现队列与两个列实现栈
- struts2表单错误处理和数据验证
- 接口的特点