Codeforces - 1189B - Number Circle - 贪心

https://codeforc.es/contest/1189/problem/B
优先考虑最大的元素怎么构造。拿两个次大的围着他就很好,但是其他的怎么安排呢?就直接降序排列就可以了。
a数组还开错了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

int n;
int a[100005];

int main() {
#ifdef Yinku
    freopen("Yinku.in", "r", stdin);
    //freopen("Yinku.out", "w", stdout);
#endif // Yinku
    while(~scanf("%d", &n)) {
        for(int i=1;i<=n;++i){
            scanf("%d",&a[i]);
        }
        sort(a+1,a+1+n);
        swap(a[n],a[n-1]);

        bool fail=false;
        for(int i=2;i<=n-1;++i){
            if(a[i]>=a[i-1]+a[i+1])
                fail=true;
        }
        if(a[1]>=a[n]+a[2])
            fail=true;
        if(a[n]>=a[n-1]+a[1])
            fail=true;
        if(fail)
            puts("NO");
        else{
            puts("YES");
            for(int i=1;i<=n;++i){
                printf("%d%c",a[i]," \n"[i==n]);
            }
        }
    }
}
posted @ 2019-07-14 19:50  韵意  阅读(275)  评论(0编辑  收藏  举报