P2239 螺旋矩阵

题目描述

一个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列的数。

输入输出样例

输入样例#1:  复制
4 2 3
输出样例#1:  复制
14

说明

【数据说明】

对于50\%50%的数据,1 ≤ n ≤ 1001n100;

对于100\%100%的数据,1 ≤ n ≤ 30,000,1 ≤ i ≤ n,1 ≤ j ≤ n1n30,000,1in,1jn。\

#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;
}

  

猜你喜欢

转载自www.cnblogs.com/xiongchongwen/p/11163069.html