题目链接:http://codeforces.com/contest/1339/problem/B
题意是说,给定数组,将其重新排序,使得得到的数组相邻元素之间的差的绝对值不递减。容易想到的第一步是读入后排序,然后按照最小、最大、次小、次大、第三小、第三大…的方式排列即可。需要注意的是这样输出的是差的绝对值不递增的序列,所以要捣鼓一下。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[100005] = {0};
int main() {
int t;
cin >> t;
while(t--) {
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a, a + n);
if(n % 2 == 0) {
int l = n / 2 - 1, r = n / 2;
while(l >= 0 && r < n) {
printf("%d ", a[r]);
printf("%d ", a[l]);
r++;
l--;
}
printf("\n");
} else {
int l = n / 2 - 1, r = n / 2 + 1;
printf("%d ", a[n / 2]);
while(l >= 0 && r < n) {
printf("%d ", a[r]);
printf("%d ", a[l]);
r++;
l--;
}
printf("\n");
}
}
return 0;
}