60pts,求条

/*
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5,Mod=1e9+7;
int n,sum,ans,ly[N],ry[N],ux[N],dx[N];
struct node
{
	int x,y,id;
}a[N];
bool cmp1(node x,node y)
{
	if(x.x==y.x) return x.y<y.y;
	return x.x<y.x;
}
bool cmp2(node x,node y)
{
	if(x.y==y.y) return x.x<y.x;
	return x.y<y.y;
}
signed main()
{
	cin>>n;
	for(int i=1;i<=n;++i) cin>>a[i].x>>a[i].y,a[i].x+=1e4+5,a[i].y+=1e4+5,a[i].id=i;
	sort(a+1,a+1+n,cmp1);
	for(int i=1;i<=n;++i)
	{
		int m=i;
		while(a[i].x==a[m+1].x) m++;
		sum=0;
		for(int j=i+1;j<=m;++j)
		{
			sum+=a[j].y-a[j-1].y;
			sum%=Mod;
			ly[a[j].id]=ly[a[j-1].id]+sum;
			ly[a[j].id]%=Mod;
		}
		sum=0;
		for(int j=m-1;j>=i;--j)
		{
			sum+=a[j+1].y-a[j].y;
			sum%=Mod;
			ry[a[j].id]=ry[a[j+1].id]+sum;
			ry[a[j].id]%=Mod;
		}
		i=m;
	}
	sort(a+1,a+1+n,cmp2);
	for(int i=1;i<=n;++i)
	{
		int m=i;
		while(a[i].y==a[m+1].y) m++;
		sum=0;
		for(int j=i+1;j<=m;++j)
		{
			sum+=a[j].x-a[j-1].x;
			sum%=Mod;
			ux[a[j].id]=ux[a[j-1].id]+sum;
			ux[a[j].id]%=Mod;
		}
		sum=0;
		for(int j=m-1;j>=i;--j)
		{
			sum+=a[j+1].x-a[j].x;
			sum%=Mod;
			dx[a[j].id]=dx[a[j+1].id]+sum;
			dx[a[j].id]%=Mod;
		}
		i=m;
	}
	for(int i=1;i<=n;++i) ans+=ly[i]*ux[i]+ly[i]*dx[i]+ry[i]*ux[i]+ry[i]*dx[i],ans%=Mod;
	cout<<ans;
	return 0;
}
1 个赞

%%%%%%%%%%orz

1 个赞

???
不就道绿吗,球球了调调吧
@2345安全卫士 @我命由我不由天

1 个赞

AC了,原因是越近贡献越大,我整成越远越大了

1 个赞

/bx /bx /bx

1 个赞