#include<bits/stdc++.h>
using namespace std;
long double min(long double a,long double b){
return(a<=b)?a:b;
}
long double max(long double a,long double b){
return (a<=b)?b:a;
}
/*
(x,y)->(x+y,x-y)
manhatun->qebi
(x+y)/2,(x-y)/2->(x,y)
*/
bool cp1(pair<double,double> a,pair<double,double> b){
return a.first<b.first;
}
bool cp2(pair<double,double> a,pair<double,double> b){
return a.second<b.second;
}
int main(){
/*int n;
cin>>n;
int ins[n][2];
for (int i=0;i<n;i++){
scanf("%d%d",&ins[i][0],&ins[i][1]);
}
long long int mm=1e15;
for (int i=0;i<n;i++){
long long int add=0;
for (int j=0;j<n;j++){
int dx=abs(ins[i][0]-ins[j][0]);
int dy=abs(ins[i][1]-ins[j][1]);
add+=max(dx,dy);
}
mm=min(mm,add);
}
cout<<mm<<endl;*/
int n;
cin>>n;
pair<double,double> ins[n+1];
for (int i=1;i<=n;i++){
double a,b;
scanf("%lf%lf",&a,&b);
ins[i].first=(a+b)/2;
ins[i].second=(a-b)/2;
}
//->manhaton
//sum=i*xi-sig(1,i)+sig(i,n)-(n-i+1)*xi;
map<pair<double,double>,long double>xans;//k->ans
long double ad[n+1];
sort(ins+1,ins+n+1,cp1);
ad[0]=0;
for (int i=1;i<=n;i++){
ad[i]=ad[i-1]+ins[i].first;
}
for (int i=1;i<=n;i++){
xans[ins[i]]=ad[n]-2*ad[i]+(2*i-n)*ins[i].first;
}
sort(ins+1,ins+n+1,cp2);
ad[0]=0;
for (int i=1;i<=n;i++){
ad[i]=ad[i-1]+ins[i].second;
}
for (int i=1;i<=n;i++){
xans[ins[i]]+=ad[n]-2*ad[i]+(2*i-n)*ins[i].second;
}
long double ans=1e16;
for (map<pair<double,double>,long double>::iterator it=xans.begin();it!=xans.end();it++){
ans=min(ans,it->second);
}
long long int out=ans;
cout<<out<<endl;
return 0;
}
如上的代码,一番乱搞终于对了;
然而没有加化整型的out就会全wa
用的cout啊