思路:我们倒着看,首先判断以下当前元素有没有被操作过,被操作过的话,那么需要改为操作后的数,然后跟当前数的前一个数进行比较,如果a[i] < a[i - 1]的话,那么需要将a[i - 1]拆分,然后再判断即可。
代码:
void solve(){int n;cin >> n;vector<int>a(n), b;for(int i = 0;i < n;i ++)cin >> a[i];vector<int>st(n, -1);for(int i = n - 1;i > 0;i --){if(st[i] == 1){if(a[i] >= 10)a[i] = a[i] / 10;}if(a[i] < a[i - 1]){st[i - 1] = 1;if(a[i] < a[i - 1] % 10 || a[i - 1] % 10 < a[i - 1] / 10){cout << "NO\n";return;}}}cout << "YES\n";
}