WA80pts 求调
查看原帖
WA80pts 求调
961972
Lele_Programmer楼主2024/5/1 18:17

赛时一直没有思路,80pts 求调

#include <bits/stdc++.h>

#define int long long
#define inf 9000000000000000000LL

using namespace std;

const int N=1000005;

int n;
int a[N];
int sum,avg;
int b[N];
int maxx=-inf,minn=inf;

bool cmp(const int& a,const int& b) {
    return a<b;
}

signed main() {
    scanf("%lld",&n);
    for (int i=1;i<=n;++i) {
        scanf("%lld",&a[i]);
        sum+=a[i];
        a[i]*=2;
    }
    sort(a+1,a+1+n,cmp);
    for (int i=2;i<=n-1;++i) swap(a[i],a[n]);
    avg=sum/n;
    b[1]=avg;
    for (int i=2;i<=n;++i) {
        b[i]=a[i-1]-b[i-1];
    }
    int k=b[1]+b[n];
    int delta=a[n]-k;
    delta/=2;
    int cur=0;
    for (int i=1;i<=n;++i) {
        if (!cur) b[i]+=delta;
        else b[i]-=delta;
        cur^=1;
    }
    for (int i=1;i<=n;++i) {
        maxx=max(maxx,b[i]);
        minn=min(minn,b[i]);
    }
    // cout<<maxx<<" "<<minn<<endl;
    for (int i=1;i<=n;++i) {
        if (b[i]==maxx) {
            printf("%lld ",a[i]/2);
            for (int tmp=1,j=i+1;tmp<=n-1;++j,++tmp) {
                if (j==n+1) j=1;
                printf("%lld ",a[j]/2);
            }
            putchar(10);
            break;
        }
    }
    for (int i=1;i<=n;++i) {
        if (b[i]==minn) {
            printf("%lld ",a[i]/2);
            for (int tmp=1,j=i+1;tmp<=n-1;++j,++tmp) {
                if (j==n+1) j=1;
                printf("%lld ",a[j]/2);
            }
            break;
        }
    }
    return 0;
}

/*
7
5 6 6 7 5 2 1
*/
2024/5/1 18:17
加载中...