Result: Accepted
Time: 33ms
Memory: 2092kB
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int t,N,a[1000],ans[1010][110],m,n;
scanf("%d",&t);
while (t--)
{
memset(ans,0,sizeof(ans));
scanf("%d",&N);
for(int i=0;i<N;i++)
scanf("%d",a+i);
sort(a,a+N);
for(int i=ceil(sqrt(N*1.0));i<=N;i++)
if (N%i==0)
{
n=i;
break;
}
m=N/n;
int k=0;
int nextx=0;
int nexty=0;
N--;
if(n==N+1)
{
for(int i=N;i>=0;i--)
printf("%d\n",a[i]);
}
else
{
while(N>=0)
{
while(ans[nextx][nexty]==0&&nextx<n&&nextx>=0&&nexty>=0&&nexty<m)
{
ans[nextx][nexty]=a[N];
nextx+=next[k][0];
nexty+=next[k][1];
N--;
}
nextx-=next[k][0];
nexty-=next[k][1];
k=(k+1)%4;
nextx+=next[k][0];
nexty+=next[k][1];
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
printf("%d%c",ans[i][j]," \n"[j==m-1]);
}
printf("\n");
}
}