Official
C - ドミノ倒し / Dominoes Editorial
by
C - ドミノ倒し / Dominoes Editorial
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('')
posted:
last update:
