CodeForces - 76E Points
题目链接
https://codeforces.com/problemset/problem/76/E
解题思路
数学题,降维应该都能想到
由题意可知:
答案= (x1-x2)^2+(y1-y2)^2
(x1-x3)^2+(y1-y3)^2 (x2-x3)^2+(y2-y3)^2
(x1-x4)^2+(y1-y4)^2 (x2-x4)^2+(y2-y4)^2 (x3-x4)^2+(y3-y4)^2
....... .......
(x1-xn)^2+(y1-yn)^2 (x2-xn)^2+(y2-yn)^2 .....(X(n-1)-Xn)^2+(Y(n-1)-Yn)^2
先看X部分:
x1^2-2*x1*x2+x2^2
x1^2-2*x1*x3+x3^2 x2^2-2*x2*x3+x3^2
x1^2-2*x1*x4+x4^2 x2^2-2*x2*x4+x4^2 x3^2-2*x3*x4+x4^2
..... .....
x1^2-2*x1*xn+xn^2 x2^2-2*x2*xn+xn^2 ........ X(n-1)^2-2*X(n-1)*Xn+Xn^2
仔细观察可发现
所有x^2的和 (n-1)*(x1^2+x2^2+x3^2+....Xn^2)
其它项的和为 -x1*(x2+x3+x4+...Xn)-x2*(x1+x3+x4+...Xn)-x3*(x1+x2+x4+..Xn)-....Xn*(x1+x2+x3+...X(n-1))
可得 n*(x1^2+x2^2+x3^2+....Xn^2)-(x1+x2+x3+...Xn)^2
=(n-1)*(x1^2+x2^2+x3^2+....Xn^2)-x1*(x2+x3+x4+...Xn)-...Xn*(x1+x2+x3+...X(n-1))
所以 X部分的和为n*(x1^2+x2^2+x3^2+....Xn^2)-(x1+x2+x3+...Xn)^2
同理 Y部分的和为n*(y1^2+y2^2+y3^2+....Yn^2)-(y1+y2+y3+...Yn)^2代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+10;
ll sum, sumx, sumy, ans, x, y;
int n;
int main()
{
scanf("%d", &n);
for(int i = 1;i <= n;i ++) {
scanf("%lld %lld", &x, &y);
ans += x*x + y*y;
sumx += x;
sumy += y;
}
printf("%lld\n", n*ans - sumx*sumx - sumy*sumy);
return 0;
}
查看16道真题和解析