#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define INF (~(1<<31))
int main(){
int n;
scanf("%d", &n);
vector<int> arr(n);
for(int i = 0; i < n; ++i){
scanf("%d", &arr[i]);
}
sort(arr.rbegin(), arr.rend());
int row = 1, col = 1, minDiff = INF;
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= i; ++j){
if(i*j > n) break;
if(i*j == n && (row - col) < minDiff){
row = i;
col = j;
minDiff = j - i;
}
}
}
vector<vector<int>> mat(row, vector<int>(col, 0));
int direction = 0, right = col-1, down = row-1, left = 0, top = 0;
int i = 0, j = 0, idx = 0;
while(n--){
mat[i][j] = arr[idx++];
if(direction == 0){
if(j == right){
direction = 1;
++top;
++i;
}else{
++j;
}
}else if(direction == 1){
if(i == down){
direction = 2;
--right;
--j;
}else{
++i;
}
}else if(direction == 2){
if(j == left){
direction = 3;
--down;
--i;
}else{
--j;
}
}else if(direction == 3){
if(i == top){
direction = 0;
++left;
++j;
}else{
--i;
}
}
}
for(int i = 0; i < row; ++i){
for(int j = 0; j < col; ++j){
if(j)printf(" ");
printf("%d", mat[i][j]);
}
printf("\n");
}
return 0;
}
1105. Spiral Matrix (25)
最新推荐文章于 2023-03-16 17:19:55 发布