ACM问题 为什么的代码老是错? 求大牛改正

2025-01-06 18:31:35
推荐回答(1个)
回答1:

你这样不对吧
3
100 200 700
这个数据你就不对

/*

第xi个点到其他xj点距离之和为
xi-x1+xi-x2+xi-x3+...+xi-x[i-1]+xi-x[i+1]+...+xi-x[n-1]+x[i]-xi-x[n]
=(n-1)*x[i]-(x1+x2+x3+x4+...+x[i-1]+x[i+1]+..+x[n-1]+x[n])
这样就可以有O(N)的算法了
*/

#include
#include
#include
using namespace std;
const int MAXN=1000000;
typedef long long lld;
//typedef __int64 lld;
lld v[MAXN];//好像是要定义64位才行,你的代码我交了一下,没有改对.这里要定义64位才行
int main(){
int n,i;

lld ans,tmp,end;
while(scanf("%d",&n)!=EOF){
end=0;
for(i=0;i {
scanf("%d",&v[i]);
end+=v[i];
}
sort(v,v+n);
ans=0;
tmp=0;
for(i=0;i {
end-=v[i];
ans+=i*v[i]-tmp;
ans+=end-(n-i-1)*v[i];
tmp+=v[i];

}
//printf("%I64d\n",ans);
printf("%lld\n",ans);
}
return 0;
}