这题非常水…
贪心策略:
每次都跳到离你所在位置的最远距离(开始时在0的位置),这样平方后数会最大,结果也就最大。
注意:
1.此题要开long long ,否则只有50分(窝尝试过了QwQ)
2.不用考虑距离为负数,平方后负数会变为整数
其余见注释~~
关爱生命,远离抄袭:
#include <bits/stdc++.h>
using namespace std;
int a[305],vis[305];//数组大小>300
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];//输入
sort(a+1,a+n+1);//排序
int now=0;//最开始在0的位置 now 代表当前位置
long long ans=0;//三年OI一场空,不开long long见祖宗
for(int i=1;i<=n;i++)
{
int c=-1,w;
for(int j=1;j<=n;j++)
{
if(!vis[j])
c=max(abs(a[j]-now),c);//判断哪里离当前位置最远
}
for(int j=1;j<=n;j++)//找对应的位置
{
if(abs(a[j]-now)==c)//找到了....
{
vis[j]=1;//注意!这里是J
w=a[j];
break;//找到了便跳出循环
}
}
ans+=(long long)(w-now)*(w-now);//强制转换为long long类型
now=w;//更新当前在的位置
}
cout<<ans;//完美解决QAQ
return 0;
}