PAT (Advanced Level) Practice 1105 Spiral Matrix (25 分)
阿新 • • 發佈:2018-12-07
#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;
}