士兵--------------------------------思維(套路題)

在這裏插入圖片描述
在這裏插入圖片描述
解析:
對於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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章