【解题报告】 士兵

【解题报告】 士兵

题目:士兵

解题思路:

排序+离散化

我们可以对每个士兵的纵坐标和横坐标进行排序,然后算它们的中位数,就可以得到他们最短的路线,然后就可以对每个士兵和中位数做差,用一个变量记录它们的和,即为答案

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;
}
posted @ 2019-08-18 00:16  wweiyi  阅读(111)  评论(0编辑  收藏  举报
js脚本