文章
8
粉丝
71
获赞
0
访问
9.0k
这个答案里的对坐标x统一都-i是什么意思啊,为啥要对x这样处理排序之后就是最少步数啊,求大佬解答
#include<bits/stdc++.h>
using namespace std;
//看完题我们会发现,其实y轴我们可以不考虑,而x轴是散乱的,如何将它们统一呢?
//其实很简单,我们只需要-i就可以统一
//最后我们求出它们的中位数(n+1)/2,并用曼哈顿距离求解
int n,a[100001],b[100001];
int main()
{
while(cin>>n){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++)cin>>a[i]>>b[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)a[i]-=i;
sort(a+1,a+1+n);
sort(b+1,b+1+n);
int c=(n+1)/2;
int ans=0;
for(int i=1;i<=n;i++)ans+=abs(a[i]-a[c])+abs(b[i]-b[c]);
cout<<ans<<endl;
}
}
登录后发布评论
这个题本质是一个贪心的问题,首先第一步,你要能看出来x坐标和y坐标是可以分开来处理的。单独针对x坐标其实就是给你一组数,你要把这些数全部变成同一个数,而且要改变的量最小,那么很明显就是中位数。y坐标同理,原理就是这样,你可以在纸上画一下理解这个思路。