CodeForces - 76E Points

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces - 76E Points相关的知识,希望对你有一定的参考价值。

CodeForces - 76E Points

题意:

给你n个点的坐标,求所有一对点之间的距离的平方和
n<=100000

题解:

直接暴力n2肯定不行,我们把这个的式子列出来:
在这里插入图片描述

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\\n",a,b);
typedef long long ll;
using namespace std;

inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);
   return s*w;
}
const int maxn=1e5+9;
struct node{
	ll x,y;	
}a[maxn];
ll dis(ll x,ll y,ll a,ll b){
	return (x-a)*(x-a)+(y-b)*(y-b);
}
int sum1[maxn],sum2[maxn];
int main()
{
	int n;
	cin>>n;
	ll sum=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].x>>a[i].y;
		sum1[i]=sum1[i-1]+a[i].x;
		sum2[i]=sum2[i-1]+a[i].y;
	}
	for(int i=1;i<=n;i++){
		sum+=(n-1)*a[i].x*a[i].x-2*a[i].x*(sum1[n]-sum1[i]);
		sum+=(n-1)*a[i].y*a[i].y-2*a[i].y*(sum2[n]-sum2[i]);
	}
	
	cout<<sum<<endl;
	
}

以上是关于CodeForces - 76E Points的主要内容,如果未能解决你的问题,请参考以下文章

[CodeForces] Moving Points

Codeforces C Match Points

CodeForces A. Points in Segments

Codeforces 19D Points

CodeForces 909D Colorful Points

Beautiful Sets of Points CodeForces