目录
1.题目描述
# 点的移动
## 题目描述
平面上有 $N$ 个整数坐标点。如果将点 $(x_0,y_0)$ 移动到 $(x_1,y_1)$,则需要的代价为 $|x_0-x_1|+|y_0-y_1|$。求使得 $K(K=1, \cdots ,N)$ 个点在同一位置上最少需要的代价。
## 输入格式
第一行一个正整数 $N$;
接下来 $N$ 行,每行两个正整数 $x_i$ 和 $y_i$,为第 $i$ 个点的坐标,不超过 $10^6$。
【数据规模】。
对于 $100\%$ 的数据中,满足 $1 \le N \le 50$。
## 输出格式
输出共 $N$ 行,第 $i$ 行为使得有 $i$ 个点在统一位置的最少代价。
## 样例 #1
### 样例输入 #1
```
4
15 14
15 16
14 15
16 15
```
### 样例输出 #1
```
0
2
3
4
```
2.AC
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n, x[55], y[55], sum[55], ans[55];
int main () {
memset(ans, 0x3f, sizeof(ans));
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d%d", &x[i], &y[i]);
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= n; k++) {
sum[k] = abs(x[k]-x[i]) + abs(y[k]-y[j]);
}
sort(sum+1, sum+n+1);
int tot = 0;
for (int k = 1; k <= n; k++) {
tot += sum[k];
ans[k] = min(ans[k], tot);
}
}
}
for (int i = 1; i <= n; i++) {
printf("%d\n", ans[i]);
}
return 0;
}