您的位置:首页 > 其它

PATB 1050. 螺旋矩阵(25)

2017-06-28 00:00 225 查看

1050. 螺旋矩阵(25)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
#include <vector>

int res[11111][11111];
int cmp(int a, int b) {
return a > b;
}
int main(int argc, char *argv[]) {
int N, m, n = 1;
scanf("%d", &N);
for (n = sqrt(N); n >= 1; n--) {
if (N%n == 0) {
m = N / n;
break;
}
}

vector<int> v(N);
for (int i = 0; i < N; i++) {
scanf("%d", &v[i]);
}

//由大到小排序
sort(v.begin(), v.end(), cmp);

//填入数组m*n
int i = 0, j = -1, k = 0;
while (k < N) {
//右
while (i < m && j + 1 < n && !res[i][j + 1]) {
res[i][++j] = v[k++];

}//下
while (i + 1 < m && j < n && !res[i + 1][j])  res[++i][j] = v[k++];
//左
while (i >= 0 && j - 1 >= 0 && !res[i][j - 1])  res[i][--j] = v[k++];
//上
while (i - 1 >= 0 && j >= 0 && !res[i - 1][j])  res[--i][j] = v[k++];

}

for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%d%c", res[i][j], j == n - 1 ? '\n' : ' ');
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: