题目链接 https://www.luogu.com.cn/problem/P4995
分析
你说他是个水题吧,贪心思想又挺好,你说它不水吧,它的确挺水。
因为让求总和最大所以直接贪心,每次取排序后两端的就好,然后我就写了个谜一般的双指针,最后要记录一下\(last\)因为最后一次跳的时候不会记录上,然后就没啥了,感觉这个思想还是要好好体会的。
开\(longlong!!!!!\)
#include<iostream> #include<algorithm> #define ll long long using namespace std; const int N=1e3+10; ll a[N]; int main(){ int n; ll ans=0; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); ans+=a[n]*a[n]; int i=1,j=n,cnt=1,last=a[n]; while(i!=j){ ans+=(a[i]-a[j])*(a[i]-a[j]); if(cnt)last=a[i],j--; else last=a[j],i++; cnt^=1; } ans+=(a[i]-last)*(a[i]-last); cout<<ans; }
来源:https://www.cnblogs.com/anyixing-fly/p/12634453.html