题目描述
一个n行n列的螺旋矩阵可由如下方法生成:
从矩阵的左上角(第1行第1列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1, 2, 3, ... , n2,便构成了一个螺旋矩阵。
下图是一个n = 4时的螺旋矩阵。
1 | 2 | 3 | 4 |
12 | 13 | 14 | 5 |
11 | 16 | 15 | 6 |
10 | 9 | 8 | 7 |
输入
输入共一行,包含三个整数n,i,j,每两个整数之间用一个空格隔开,分别表示矩阵大小、 待求的数所在的行号和列号。
输出
提示
【数据说明】
对于50%的数据,1≤n≤100;
对于100%的数据,1≤n≤30,000,1≤i≤n,1≤j≤n。
代码:
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
long long n,x,y,m;
int main(){
cin>>n>>x>>y;
m=min(x,min(y,min(n-x+1,n-y+1)));
if(x<=y){
cout<<m*(4*(n-1)-4*m)+10*m-4*n-3+x+y;
return 0;
}else{
cout<<m*4*(n-m)+2*m+1-x-y;
return 0;
}
}
//2014NOIP
/************************************************************************************ -----lzp
*************************************************************************************/