公式

C - ドミノ倒し / Dominoes 解説 by MMNMM


すべてのドミノは、左隣のドミノによって倒されたか、高橋君に直接指で倒されたかのどちらかです。 左隣のドミノで倒されることの必要十分条件は、左隣のドミノが存在し、かつ左隣のドミノの高さが自身の高さより真に高いことです。

あとは、これを正しく実装することで答えを求めることができます。 実装例は以下のようになります。

#include <iostream>

int main() {
    using namespace std;
    int N;
    cin >> N;

    int prev_A = 0; // 左隣のドミノの高さ
    for (int i = 0; i < N; ++i) {
        int A;
        cin >> A;
        if (prev_A <= A) { // 自分以下の高さなら
            cout << 0 << " "; // 直接倒された
        } else { // 自分より高ければ
            cout << i << " "; // 左隣に倒された
        }
        prev_A = A; // 高さを更新して次へ
    }
    cout << endl;
    return 0;
}
N = int(input())
A = [0] + list(map(int, input().split()))

for i, pair in enumerate(zip(A, A[1:])): # 隣り合ったドミノを見て
    prev_A, now_A = pair
    if prev_A <= now_A: # 左隣が自分以下なら
        print(0, end=' ') # 高橋君に直接倒された
    else: # 左隣が自分より高ければ
        print(i, end=' ') # 左隣に倒された

print('')

投稿日時:
最終更新: