Start: Jun, 28, 2019 13:00:00
2019年度暑期短学期第四天-助教场
End: Jun, 30, 2019 23:59:00
Time elapsed:
Time remaining:

Problem_ID: B
Result: Accepted
Time: 38ms
Memory: 5340kB
Author: 2018212212125
In contest: 1289

#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<string>
#include<algorithm>
#define ll long long 
using namespace std;
const int maxn = 10010;
const int inf = 0x3f3f3f3f;
int  n, m, N, t;
int a[maxn];
int mp[maxn][107];
int main()
{
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d", &N);
		for (int i = 1; i <= N; ++i)
			scanf("%d", &a[i]);
		int minn = inf;
		for (int i = sqrt((double)N); i >= 1; --i)
		{
			if (N%i == 0)
			{
				n = N / i;
				m = i;
				break;
			}
		}
		sort(a + 1, a + 1 + N);
		reverse(a + 1, a + 1 + N);
		int num = 0;
		int i, j, q;
		for (q = 1; num<N; ++q)
		{
			for (i = q; i <= m - q + 1&&num<N; ++i)
				mp[q][i] = a[++num];
			for (i = q + 1; i <= n - q + 1&&num<N; ++i)
				mp[i][m - q + 1] = a[++num];
			for (i = m - q; i >= q&&num<N; --i)
				mp[n - q + 1][i] = a[++num];
			for (i = n - q; i >= q + 1&&num<N; --i)
				mp[i][q] = a[++num];
		}
		for (i = 1; i <= n; ++i)
		{
			for (j = 1; j <= m; ++j)
			{
				if (j != 1)printf(" ");
				printf("%d", mp[i][j]);
			}
			printf("\n");
		}
		printf("\n");
	}
	return 0;
}