简单模拟题
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int N;
const int maxn=10020;
const int INF=10000000;
int num[maxn];
bool cmp(int a,int b){
return a>b;
}
int main(void){
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",&num[i]);
}
sort(num,num+N,cmp);
int mm,nn=sqrt(N);
while(N%nn!=0){
nn--;
}
mm=N/nn;
int G[mm][nn];
int m=mm,n=nn,index=0,beginx=0,beginy=0;
while(index<N){
for(int i=beginx;i<beginx+n && index<N;i++) G[beginy][i]=num[index++];
for(int i=beginy+1;i<beginy+m && index<N;i++) G[i][beginx+n-1]=num[index++];
for(int i=beginx+n-2;i>=beginx && index<N;i--) G[beginy+m-1][i]=num[index++];
for(int i=beginy+m-2;i>=beginy+1 && index<N;i--) G[i][beginx]=num[index++];
m-=2;
n-=2;
beginx++;
beginy++;
}
for(int i=0;i<mm;i++){
for(int j=0;j<nn;j++){
printf("%d",G[i][j]);
if(j!=nn-1) printf(" ");
}
printf("\n");
}
return 0;
}