思路:我们倒着看,首先判断以下当前元素有没有被操作过,被操作过的话,那么需要改为操作后的数,然后跟当前数的前一个数进行比较,如果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";
}