NC16502. [NOIP2014]螺旋矩阵
描述
一个 n 行 n 列的螺旋矩阵可由如下方法生成:
1 | 2 | 3 | 4 |
12 | 13 | 14 | 5 |
11 | 16 | 15 | 6 |
10 | 9 | 8 | 7 |
现给出矩阵大小 n 以及 i 和 j ,请你求出该矩阵中第 i 行第 j 列的数是多少。
输入描述
输入共一行,包含三个整数 n,i,j ,每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。
输出描述
输出一个整数,表示相应矩阵中第 i 行第 j 列的数。
示例1
输入:
4 2 3
输出:
14
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 488K, 提交时间: 2018-11-04 10:24:10
#include<bits/stdc++.h> using namespace std; int main() { int n,x,y; cin>>n>>x>>y; int p=max(abs(n-2*x+1),abs(n-2*y+1))+1; if(x>y) cout<<n+3*p-x-y+n*n-p*p-1<<endl; else cout<<p-n+x+y+n*n-p*p-1<<endl; return 0; }
Python3(3.5.2) 解法, 执行用时: 28ms, 内存消耗: 7104K, 提交时间: 2019-12-15 18:42:30
n,i,j=map(int,input().split()) d=min(i-1,j-1,n-i,n-j) x,y,xx,yy=[i-1,j-1,n-i,n-j] ans=(n-d)*d*4 if (x==d): ans+=j-d elif (y==d): ans+=4*n-7*d-2-i elif (xx==d): ans+=3*n-5*d-j-1 elif (yy==d): ans+=n+i-3*d-1 print (ans)
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 488K, 提交时间: 2020-03-30 21:46:43
#include<bits/stdc++.h> using namespace std;int n,x,y,p;int main(){cin>>n>>x>>y;p=max(abs(n-2*x+1),abs(n-2*y+1))+1;if(x>y) cout<<n+3*p-x-y+n*n-p*p-1<<endl;else cout<<p-n+x+y+n*n-p*p-1<<endl;}