zoukankan      html  css  js  c++  java
  • CodeForces 76E Points

    给出n个点,求任意两点间距离的平方和。

    暴力显然超时,可以把公式写出来,化简一下,发现预处理一下后缀和就可以o(n)出解了。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    const int maxn=100000+10;
    struct Point
    {
        long long x,y;
    }p[maxn];
    int n;
    long long sum[maxn];
    long long a[maxn];
    
    long long get(int x)
    {
        long long res=0;
        int tot=0;
        if(x==0) for(int i=1;i<=n;i++) a[i]=p[i].x;
        else for(int i=1;i<=n;i++) a[i]=p[i].y;
        sum[n+1]=0; for(int i=n;i>=1;i--) sum[i]=sum[i+1]+a[i];
        for(int i=1;i<=n;i++) res=res+a[i]*a[i]*(n-1);
        for(int i=1;i<=n-1;i++) res=res-2*a[i]*sum[i+1];
        return res;
    }
    
    int main()
    {
        scanf("%d",&n);
        long long ans=0;
        for(int i=1;i<=n;i++) scanf("%lld%lld",&p[i].x,&p[i].y);
        ans=ans+get(0);
        ans=ans+get(1);
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    学习笔记九
    学习笔记八
    python学习笔记七
    学习笔记七
    仿优酷项目
    orm框架分析——仿优酷项目
    python操作MySQL
    数据库—子查询,视图,事务
    数据库—表查询
    mysql表关系
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5481811.html
Copyright © 2011-2022 走看看