解析:
對於y軸 移動到同一水平線 。那麼就將y軸座標排序,求中位數即可、
對於x軸,假設有3個數x1,x2,x3 要移動到a,a+1,a+2
那麼x軸需要移動的次數 |x1-a| +|x2-(a+1)|+|x3-(a+2)|
轉化一下就是: |(x1)-a|+|(x2-1)-a|+|(x3-2)-a|+…+|(xn-(n-1))-a|
處理一下x數組,又轉化成求中位數的問題
次數=處理y軸次數+處理x軸次數
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100;
int x[N],y[N];
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) cin>>x[i]>>y[i];
int res=0;
sort(y+1,y+1+n);
sort(x+1,x+1+n);
for(int i=1;i<=n;i++) res+=abs(y[i]-y[(n+1)/2]);
for(int i=2;i<=n;i++) x[i]-=(i-1);
sort(x+1,x+1+n);
for(int i=1;i<=n;i++) res+=abs(x[i]-x[(n+1)/2]);
cout<<res<<endl;
}