Official

A - 駐車場の整理 / Parking Lot Organization Editorial by MtSaka Editorial for printing


初心者の方へ


各車について、座標が \(0\) 未満のときは 座標 \(0\) に移動させ、座標が \(M\) より大きいときは座標 \(M\) に移動させることで最小コストになります。それ以外の座標が \(0\) 以上 \(M\) 以下の時はそのまま移動させないままでよいです。

そのため、各 \(A_i\) についてそれが \(0\) 未満か \(M\) より大きいかを判定し、前者の場合は \(-A_i\) 、後者では \(A_i-M\) を答えの最小コストに加算します。

実装では、答えが32bit整数型ではオーバーフローすることがあることに気を付けてください。

実装例(C++)

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    vector<int> a(n);
    for (auto& e : a) cin >> e;
    long long ans = 0;
    for (auto e : a) {
        if (e < 0) ans += abs(e);
        if (e > m) ans += (e - m);
    }
    cout << ans << endl;
}

posted:
last update: