CF-Round #633-div2-B题
这道题思维。
题目大意:给你一个序列,让你对这个序列重新排列,输出一个序列满足下列要求:
|a1−a2|≤|a2−a3|≤…≤|an−1−an|
思路:我们把这个序列sort一下,之后从中间开始,双指针右左分别输出就行啦~
这样可以保证后面相减的差大于前面相减的差。
为啥?画一下图就知道了。
emmm图画的丝丝丑。。
不过还是可以看清楚的!
代码部分:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int t;
int n;
int a[N];
int main()
{
cin >> t;
while (t--)
{
scanf ("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf ("%d", &a[i]);
}
sort(a + 1, a + n + 1);
int l = n / 2, r = n / 2 + 1;
for (; l >= 1 && r <= n; l--, r++)
{
cout << a[r] << " " << a[l] << " ";
}
if (n & 1)
{
cout << a[n];
}
cout << endl;
}
return 0;
}