b_zj_庆祝61(思维)

牛老师挑选出n个小朋友参与跳舞节目,已知每个小朋友的身高(h_i)。为了让舞蹈看起来和谐,牛老师需要让跳舞的圆圈队形中相邻小朋友的身高差的最大值最小。

思路:对于 1 2 3 4 5 6,然后我们应该排成类似 6 4 2 1 3 5 这样可满足最大值最小,核心思想是田忌赛马,先放 6 5,然后 6 4 3 5...;
这种序列有一个特点:相邻两位的下标在原来序列中相差2

#include<bits/stdc++.h>
using namespace std;
int main() {
    std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int n; cin>>n;
    int a[n]; for (int i=0; i<n; i++) cin>>a[i];
    sort(a,a+n);
    int ans = max(a[1]-a[0], a[n-1]-a[n-2]);
    for (int i=0; i<n-2; i++) {
        ans = max(ans, a[i+2]-a[i]);
    }
    cout<<ans;
    return 0;
}
原文地址:https://www.cnblogs.com/wdt1/p/14506994.html