這題非常水…
貪心策略:
每次都跳到離你所在位置的最遠距離(開始時在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;
}