Problem - 1339B - Codeforces
解析:
题目要求每相邻两个值差的绝对值相等或递增。
先排序,可以想到我们先取两侧的数肯定相距最远,然后靠中心每次取两个数,这样符合题目要求。
直接遍历,先取的是答案靠后的数据,所以暂时保存,最后输出即可。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int t,n,a[N];
signed main(){
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
sort(a+1,a+n+1);
vector<int>res;
for(int i=1;i<=n;i++){
int j=n+1-i;
if(i>j) break;
if(i!=j){
res.push_back(a[j]);
res.push_back(a[i]);
}
else res.push_back(a[i]);
}
for(int i=res.size()-1;i>=0;i--) printf("%lld ",res[i]);
puts("");
}
return 0;
}