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;
}
全部评论

相关推荐

耀孝女:就是你排序挂了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务