https://www.acwing.com/problem/content/125/
非常に複雑に感じるようになったが、実際には、同じの中間点に、が、xを待たなければならなかったシーケンスであり、その後、悪化しないように貪欲最寄りの兵士が、彼のポジションに行くべきましょう。
xyは無関係であるので、彼らはグリッドを禁止に来ないように方法が常にあります。
直接配列決定。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int x[10005], y[10005];
int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
int n;
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d%d", &x[i], &y[i]);
sort(x + 1, x + 1 + n);
for(int i = 1; i <= n; ++i)
x[i] -= i;
sort(x + 1, x + 1 + n);
sort(y + 1, y + 1 + n);
int xmid = x[(n + 1) / 2];
int ymid = y[(n + 1) / 2];
ll sum = 0;
for(int i = 1; i <= n; ++i) {
sum += abs(xmid - x[i]);
sum += abs(ymid - y[i]);
}
printf("%lld\n", sum);
}