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: 44ms
Memory: 2388kB
Author: 2018212212064
In contest: 1289

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <stack>
#include <vector>
#include <string>
#include <iostream>
#include <list>
#include <cstdlib>
#include <bitset>
#define lowbit(x) (x&(-x))
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
const long long INF = 0x3f3f3f3f3f3f3f3fLL;
const int inf = 0x3f3f3f3f;
using namespace std;
const int maxn = 1e4 + 10;
int* mp[maxn];
int a[maxn];
int main()
{
	int T;
	int N;
	scanf("%d", &T);
	while (T--)
	{
		scanf("%d", &N);
		for (int i = 0; i < N; ++i)
			scanf("%d", a + i);
		sort(a, a + N, greater<int>());
		int m = sqrt(N), n;
		while (N % m != 0)--m;
		n = N / m;
		for (int i = 0; i <= n; ++i)
			mp[i] = new int[m + 10];
		int cnt = 0;
		for (int i = 0; i < n / 2 + 1; ++i)
		{
			for (int j = i; j < m - i && cnt < N; ++j)
				mp[i][j] = a[cnt++];
			for (int j = i + 1; j < n - i && cnt < N; ++j)
				mp[j][m - i - 1] = a[cnt++];
			for (int j = m - i - 2; j >= i && cnt < N; --j)
				mp[n - i - 1][j] = a[cnt++];
			for (int j = n - i - 2; j > i && cnt < N; --j)
				mp[j][i] = a[cnt++];
		}
		for (int i = 0; i < n; ++i)
		{
			for (int j = 0; j < m; ++j)
				printf("%d%c", mp[i][j], " \n"[j == m - 1]);
			delete mp[i];
		}
		puts("");
	}
//	system("pause");
}