/*
*/
#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 个赞
AC了,原因是越近贡献越大,我整成越远越大了
1 个赞
/bx /bx /bx
1 个赞