题目描述
一个nn行nn列的螺旋矩阵可由如下方法生成:
从矩阵的左上角(第11行第11列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1, 2, 3, ... , n1,2,3,...,n,便构成了一个螺旋矩阵。2
下图是一个n = 4n=4 时的螺旋矩阵。
1 2 3 4
12 13 14 5 11 16 15 6 10 9 8 7
现给出矩阵大小nn以及ii和jj,请你求出该矩阵中第ii行第jj列的数是多少。
(本题目为2014NOIP普及T3)
输入输出格式
输入格式:
共一行,包含三个整数 n,i,jn,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。
输出格式:
一个整数,表示相应矩阵中第ii行第jj列的数。
输入输出样例
说明
【数据说明】
对于50\%50%的数据,1 ≤ n ≤ 1001≤n≤100;
对于100\%100%的数据,1 ≤ n ≤ 30,000,1 ≤ i ≤ n,1 ≤ j ≤ n1≤n≤30,000,1≤i≤n,1≤j≤n。\
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> using namespace std; long long n,i,j,mi,ans; int main(){ scanf("%lld%lld%lld",&n,&i,&j); mi=min(i,min(j,min(n-i+1,n-j+1))); if(i<=j){ ans=mi*(4*(n-1)-4*mi)+10*mi-4*n-3+i+j; } else{ ans=mi*(4*n-4*mi)+2*mi+1-i-j; } printf("%lld",ans); return 0; }