![bzoj 3170: [Tjoi 2013]松鼠聚会 bzoj 3170: [Tjoi 2013]松鼠聚会](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
#include<cstdio>
#include<iostream>
#include<algorithm>
#define M 100008
using namespace std;
struct data
{
int x,y,num;
}a[M];
long long n,suma[M],suma1[M],ans,sumb[M],sumb1[M];
bool cmpx(data a1,data a2)
{
return a1.x<a2.x;
}
bool cmpy(data a1,data a2)
{
return a1.y<a2.y;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int a1,a2;
scanf("%d%d",&a1,&a2);
a[i].x=a1+a2;
a[i].y=a1-a2;
}
sort(a+,a+n+,cmpx);
ans=100000000000000000LL;
for(int i=;i<=n;i++)
{
suma[i]=suma[i-]+a[i].x;
a[i].num=i;
}
for(int i=n;i;i--)
suma1[i]=suma1[i+]+a[i].x;
sort(a+,a+n+,cmpy);
for(int i=;i<=n;i++)
sumb[i]=sumb[i-]+a[i].y;
for(int i=n;i;i--)
sumb1[i]=sumb1[i+]+a[i].y;
for(int i=;i<=n;i++)
{
long long ss=,x=suma[a[i].num]-suma[a[i].num-],y=sumb[i]-sumb[i-];
ss=x*(a[i].num-)-suma[a[i].num-]+suma1[a[i].num+]-x*(n-a[i].num)+y*(i-)-sumb[i-]+sumb1[i+]-y*(n-i);
ans=min(ss,ans);
}
printf("%lld\n",ans/);
return ;
}
这个题让我学会了切比雪夫距离。