Start: Jul, 01, 2019 08:30:00
2019年度暑期短学期第四天
End: Jul, 01, 2019 11:30:00
Time elapsed:
Time remaining:

Problem_ID: B
Result: Accepted
Time: 33ms
Memory: 2092kB
Author: project2501
In contest: 1277

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