1. 程式人生 > >PAT (Advanced Level) Practice 1105 Spiral Matrix (25 分)

PAT (Advanced Level) Practice 1105 Spiral Matrix (25 分)

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

const int N=1e5+5;

int a[N],mp[1000+5][1000+5];

int main()
{
    int N;scanf("%d",&N);
    for(int i=0;i<N;i++)
        scanf("%d",a+i);
    sort(a,a+N);
    reverse(a,a+N);
    int n,m;
    m=sqrt(N)
; while(N%m) m++; n=N/m; if(n>m) swap(n,m); int num=0; for(int i=0;i<N;) { for(int j=num;j<n-num&&i<N;j++) mp[num][j]=a[i++]; for(int j=num+1;j<m-num&&i<N;j++) mp[j][n-num-1]=a[i++]; for(int j=n-2-
num;j>=num&&i<N;j--) mp[m-num-1][j]=a[i++]; for(int j=m-2-num;j>num&&i<N;j--) mp[j][num]=a[i++]; num++; } for(int i=0;i<m;i++) for(int j=0;j<n;j++) printf("%d%c",mp[i][j]," \n"[j==n-1]); return 0; }