赛时一直没有思路,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
*/