はまやんはまやんはまやん

hamayanhamayan's blog

Three Equal [CSAcademy #73 A]

https://csacademy.com/contest/round-73/task/three-equal/

N要素の0~2の配列Aがある。
これに「A[i] = ((A[i] + 1) % 3)」という操作を行い、全ての要素を等しくしたい。
最低何回必要か。

解法

全ての要素をどの数に揃えるかを全探索する。
どの数に揃えるかを決めたら、操作をシミュレートして必要回数を求める。
その最小値が答え。

int N, A[1010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    rep(i, 0, N) cin >> A[i];

    int ans = inf;
    rep(c, 0, 3) {
        int cnt = 0;
        rep(i, 0, N) {
            int x = A[i];
            while (x != c) {
                x = (x + 1) % 3;
                cnt++;
            }
        }
        chmin(ans, cnt);
    }
    cout << ans << endl;
}