Darts --HOJ 11960
1、题目类型:数论。
2、解题思路:(1)由于距离公式定义为:|x1-x2|+|y1-y2|,所以可以将x 、y 分开求解;(2)排序x 、y 分析第 i 个数值的前后关系有 ans+=sum-(n-i)*X[i-1]。
3、注意事项:注意记录sum时,sum越界,需用 double 记录。
4、实现方法:
#include<iostream>
#include<algorithm>
using namespace std;
#define LL double
LL X[10010],Y[10010];
LL sumx,sumy;
int n;
void Solve(int ca)
{
int i;
LL ansx=0,ansy=0;
sumx-=X[0];
sumy-=Y[0];
for(i=1;i<n;i++)
{
ansx+=sumx-(n-i)*X[i-1];
sumx-=X[i];
ansy+=sumy-(n-i)*Y[i-1];
sumy-=Y[i];
}
printf("Case #%d: %I64d\n",ca,(__int64)(ansx+ansy));
}
int main()
{
int i,T,ca=1;
cin>>T;
while(T--)
{
sumx=sumy=0;
cin>>n;
for(i=0;i<n;i++)
{
scanf("%lf%lf",&X[i],&Y[i]);
sumx+=X[i];
sumy+=Y[i];
}
sort(X,X+n);
sort(Y,Y+n);
Solve(ca++);
}
return 0;
}