链接:
https://codeforces.com/problemset/problem/1537/C
题意:
本题说有n座山,要先让开头和结尾的两座山高度相差最小,然后其他的山,若hi<=hi+1则总难度+1,我要要使总难度最大。
本题先排序,然后取两个差距最小的数排在两头,其他的分两段升序输出即可。
代码如下:
#include<iostream>
#include<vector>
#include<cmath>
#include<map>
#include<algorithm>
#include<string>
#include<string.h>
#include<random>
using namespace std;
typedef long long ll;
int h[200003];
int main() {
int q;
cin >> q;
while (q--) {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> h[i];
}
sort(h, h + n);
int min = 2147483647;
int po = 0;
for (int i = 1; i < n; i++) {
if (h[i] - h[i - 1]<min) {
min = h[i] - h[i - 1];
po = i;
}
}
if (n == 2) {
cout << h[0] << " " << h[1];
}
else {
for (int i = po; i < n; i++) {
cout << h[i] << " ";
}
for (int i = 0; i < po; i++) {
cout << h[i] << " ";
}
}
cout << endl;
}
return 0;
}