【解题报告】 士兵
【解题报告】 士兵
题目:士兵
解题思路:
排序+离散化
我们可以对每个士兵的纵坐标和横坐标进行排序,然后算它们的中位数,就可以得到他们最短的路线,然后就可以对每个士兵和中位数做差,用一个变量记录它们的和,即为答案
AC代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn=10005;
int n;
long long x[maxn],y[maxn],mx,my,ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>x[i]>>y[i];
sort(x+1,x+1+n);
sort(y+1,y+1+n);
for(int i=1;i<=n;i++)
x[i]-=i;
sort(x+1,x+1+n);
mx=x[(n+1)>>1];
my=y[(n+1)>>1];
for(int i=1;i<=n;i++)
{
ans+=abs(x[i]-mx);
ans+=abs(y[i]-my);
}
cout<<ans<<endl;
return 0;
}
本博文为wweiyi原创,若想转载请联系作者,qq:2844938982