#include <string.h>
#include <stdio.h>
#include <vector>
#include <queue>
#include <algorithm>
#include <map>
#include <string>
#include <iostream>
#include <math.h>
using namespace std;
int N;
int A[100010];
int B[1100][1100];
bool vis[1100][1100];
bool cmp(int a,int b)
{
return a>b;
}
int num=0;
void fillm(int maxr,int maxl,int startr,int startl)
{
int l,r;
for(int i=0;i<maxl;i++)
{
l=startl+i;
r=startr;
if(vis[l][r]==false)
{
B[r][l]=A[num++];
vis[l][r]=true;
}
}
for(int i=1;i<maxr;i++)
{
l=startl+maxl-1;
r=startr+i;
if(vis[l][r]==false)
{
B[r][l]=A[num++];
vis[l][r]=true;
}
}
for(int i=maxl-2;i>=0;i--)
{
l=startl+i;
r=startr+maxr-1;
if(vis[l][r]==false)
{
B[r][l]=A[num++];
vis[l][r]=true;
}
}
for(int i=maxr-2;i>0;i--)
{
l=startl;
r=startr+i;
if(vis[l][r]==false)
{
B[r][l]=A[num++];
vis[l][r]=true;
}
}
}
int main()
{
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%d",&A[i]);
}
sort(A,A+N,cmp);
int n=sqrt(N*1.0),m;
while(N%n!=0&&n>=1)
{
n--;
}
m=N/n;
int sl=0,sr=0,r=m,l=n;
while(r>0&&l>0)
{
fillm(r,l,sl,sr);
r-=2;
l-=2;
sl++;
sr++;
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(j!=0)printf(" ");
printf("%d",B[i][j]);
}
printf("\n");
}
return 0;
}
PAT甲1105 Spiral Matrix(25 分)
最新推荐文章于 2020-06-08 20:24:15 发布