当前位置:网站首页>Codeforces Round #633 (Div. 2) B. Sorted Adjacent Differences

Codeforces Round #633 (Div. 2) B. Sorted Adjacent Differences

2022-07-08 00:02:00 非长

题目链接:https://codeforces.com/problemset/problem/1339/B
解题思路: 思维+贪心
开始没转过弯来,一直想怎么把相等的数放在前面,后面看了大佬题解才知道方法从刚开始就不对。
使数字形成一种特殊的排列,使得数组中相邻两个数,前一个减后一个的差有非递减趋势。
可以先反过来想,怎么使得数组中相邻两个数的差呈非递增趋势(便于理解分析很多)之后反过来输出就行。
非递增情况(大的在前)最大的情况:自然是最大数和最小数的差,由于是按差的绝对值排列,因此后一个为最小和次大值,再后为次小值和次大值…最后是中间部分(奇数个数据最后为中间那个,偶数个照规律排列完即可)
由此:对于题目要求情况,反过来输出即可。没有前面情况的过渡可能较难理解为什么从中间开始向两边输出。
AC代码:

#include<iostream>
#include<algorithm>
using namespace std;
int num[100005];
int main()
{
    
	int t;
	cin >> t;
	while (t--)
	{
    
		int n;
		cin >> n;
		for (int i = 0; i < n; i++)
			cin >> num[i];
		sort(num, num + n);
		if (n % 2 == 1)
			cout << num[n / 2] << ' ';
		for (int i = n / 2 - 1; i >= 0; i--)
			cout << num[i] << ' ' << num[n - i - 1] << ' ';
		cout << endl;
	}
}
原网站

版权声明
本文为[非长]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_52930538/article/details/125590443