Solution
设x是所有点x坐标的集合,y是所有点y坐标的集合
有一个结论:最终移动到的点的横坐标一定属于x,纵坐标一定属于y(因此未必是给出的点)
Code
// by spli
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
int n;
int x[55],y[55];
LL dis[55],ans[55];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d%d",&x[i],&y[i]);
memset(ans,0x7f,sizeof(ans));
//前两重循环分别枚举最终移动到的点的横纵坐标
for(int i=1;i<=n;++i)//枚举横坐标
for(int j=1;j<=n;++j){//枚举纵坐标
for(int k=1;k<=n;++k)//枚举每个点与终点的距离
dis[k]=abs(x[k]-x[i])+abs(y[k]-y[j]);
sort(dis+1,dis+1+n);
LL tot=0;
for(int k=1;k<=n;++k)
tot+=dis[k],ans[k]=min(ans[k],tot);
}
for(int i=1;i<=n;++i) printf("%lld\n",ans[i]);
return 0;
}