https://www.luogu.org/problemnew/show/P3650
通过样例也会发现,最后最小高度、最大高度都是一个固定的数。意识到了样例的重要性,会给你思路,而不会跑偏!
#include<bits/stdc++.h>
using namespace std;
#define Max (int)(1e5+10)
#define INF 0x3f3f3f3f3f
typedef long long ll;
int n;
int a[1000+10];
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
int sum=INF,t;
for(int i=1;i<=100-17+1;i++)
{
t=0;
for(int j=1;j<=n;j++)
{
if(a[j]<i) t+=(i-a[j])*(i-a[j]);
if(a[j]>i+17) t+=(a[j]-i-17)*(a[j]-i-17);
}
sum=min(sum,t);
}
printf("%d\n",sum);
}