题3:螺旋矩阵
【题目描述】
一个
n
n
n 行
n
n
n 列的螺旋矩阵可由如下方法生成:
从矩阵的左上角(第
1
1
1 行第
1
1
1 列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入
1
,
2
,
3
,
.
.
.
,
n
1, 2, 3, ... , n
1,2,3,...,n ,便构成了一个螺旋矩阵。
下图是一个
n
=
4
n = 4
n=4 时的螺旋矩阵。
现给出矩阵大小 n n n 以及 i i i 和 j j j,请你求出该矩阵中第 i i i 行第 j j j 列的数是多少。
【输入】
输入共一行,包含三个整数 n , i , j n,i,j n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。
【输出】
输出共一行,包含一个整数,表示相应矩阵中第 i i i 行第 j j j 列的数。
【输入样例】
4 2 3
【输出样例】
14
【数据说明】
对于 50 % 50\% 50%的数据, 1 ≤ n ≤ 100 1 ≤ n ≤ 100 1≤n≤100;
对于 100 % 100\% 100%的数据, 1 ≤ n ≤ 30 , 000 , 1 ≤ i ≤ n , 1 ≤ j ≤ n 1 ≤ n ≤ 30,000,1 ≤ i ≤ n,1 ≤ j ≤ n 1≤n≤30,000,1≤i≤n,1≤j≤n。
【代码如下】:
#include <bits/stdc++.h>
using namespace std;
//ifstream cin("matrix.in");
//ofstream cout("matrix.ans");
int n,x,y,c,ans;
int main()
{
cin >> 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;
else
ans+=4*n-7*c-x+5;
cout << ans;
return 0;
}
标签:NOIP2014,螺旋,30,矩阵,min,ans,100,复赛
From: https://blog.csdn.net/lpstudio/article/details/139188334