校赛的题啊,后悔没有早早做了!!!校赛啊!!!那么丰厚的奖品呢!!!唉~省赛加油吧!!!
/*
ID: 15901291
TASK: skidesign
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <algorithm>
#include <math.h>
/******************************************************************************************************************
数据小,直接枚举长度为17的范围即可。
UPDATE: 枚举所有长度为17的间隔并求对应费用,
如1和18,即求把所有高度大于18的山变为18和小于1的山变为1的费用,
然后对所有间隔对应的费用求最小值
******************************************************************************************************************/
using namespace std;
int a[1050];
int main()
{
ifstream fin("skidesign.in");
ofstream fout("skidesign.out");
int T;
while(fin>>T)
{
int price=1<<30,ans;
for(int i = 0;i < T;i ++) fin>>a[i];
sort(a,a+T);
for(int i = 0;i <= 83;i ++){
ans=0; //注意这里,每次需要将 ans 赋值为 0
for(int j = 0;j < T;j ++){
if(a[j] < i) ans+=pow(i-a[j],2);
if(a[j] > i+17) ans+=pow(a[j]-17-i,2);
}
price=min(price,ans);
}
fout<<price<<endl;
}
return 0;
}