[CF1131C]Birthday【贪心】

题目描述

有 n n个数摆放在一个环形中(最后一个与第一个相邻),需要改变这些数的顺序,使得相邻两个数的最大绝对差最小。如果有多种最佳方案,输出任意一种。
(翻译来自洛谷)

分析

首先收尾相接,那么很容易想到是用贪心。
从小到大排序后,我们考虑如何贪心。
因为我们需要绝对值最小,那么坑定是一个是升序一个降序。
什么意思?就是两个跳从头调到尾,在跳回来。
要注意判断奇偶性。

代码

#include <bits/stdc++.h>
using namespace std;
int n;
int a[1000005];
int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i ++) scanf("%d", &a[i]);
    sort(a + 1, a + 1 + n);
    for (int i = 1; i <= n; i += 2) 
        printf("%d ", a[i]);
    for (int i = (n / 2) * 2; i >= 2; i -= 2) 
        printf("%d ", a[i]);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/chhokmah/p/10585652.html
今日推荐