题解 AT4894 【[ABC136C] Build Stairs】

Zirnc

2020-02-20 17:52:15

Solution

[ChungZH's blog](https://chungzh.cn) · [ChungZH's portfolio](https://chungzh.cc) > 从左到右连续排列 $N$ 个正方形。从左起第 $i$ 个正方形的高度为 $H_i$。 > > 对于每个正方形,您将一次执行以下任一操作: > > - 将正方形的高度减少 $1$。 > - 什么都不做 > > 确定是否可以执行操作,以使正方形的高度从左到右不减小。 输入完之后,从后往前推,如果 $h_{i-1}$ 和 $h_i$ 的差大于 $1$,说明怎么操作也不可以了,输出 `No`。 如果 $h_{i-1}-1==h_i$,说明还可以~~抢救一下~~通过操作变成一样多,也就是不减小,把 $h_{i-1}-1$ 之后继续推下去。 ```cpp #include <algorithm> #include <cctype> #include <cstdio> #include <iostream> using namespace std; int n; long long h[100005]; int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> h[i]; } for (int i = n - 1; i > 0; i--) { if (h[i - 1] - 1 > h[i]) { cout << "No\n"; return 0; } else if (h[i-1]-1 == h[i]) { h[i-1]--; } } cout << "Yes\n"; return 0; } ```