题目大意:
让一些分散的士兵站成一横排,问所需的最少步数。
我的理解:
这道题主要考察对中位数的理解,这也是第一次接触到这中类型的题,不太理解,借鉴了别人的思路。
传送门:点我传送
补充-->中位数 : 即在这组数据中,有一半数据比它大,有一半数据比它小。
我的代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#define MAX_N 10005
using namespace std;
int x[MAX_N],y[MAX_N];
int n;//士兵数目
int main()
{
cin>>n;
for(int i=0;i<n;i++)
scanf("%d%d",&x[i],&y[i]);
sort(x,x+n);
for(int i=0;i<n;i++)
x[i]-=i;
sort(x,x+n);
sort(y,y+n);
int ansx=x[n/2],ansy=y[n/2];
int ans=0;
for(int i=0;i<n;i++)
{
ans+=abs(x[i]-ansx);
ans+=abs(y[i]-ansy);
}
cout<<ans<<endl;
return 0;
}