思路:

因为要判断是否单调不降,所以将这个数组从后往前扫一遍,便会遇到两种情况:

  1. 前一个数大于后一个数,便考虑将前一个数拆分,如果十位还大于个位,说明拆分后还不能单调不降,输出 NO,否则继续扫下去。

  2. 前一个数小于等于后一个数,便继续扫。

考虑完这两种情况,便可以愉快地 AC 了。

AC 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<bits/stdc++.h>
using namespace std;
int a[114],n,t;
bool f;
int main() {
cin>>t;
while(t--){
cin>>n;
f=0;
for(int i=1; i<=n; i++){
cin>>a[i];
}
for(int i=n; i>0; i--) {
if(a[i-1]>a[i]) {
int x=a[i-1];
int s=x/10,g=x%10;
if(s<=g&&g<=a[i]) {
a[i-1]=s;
}
else {
cout<<"NO"<<endl;
f=1;
break;
}
}
}
if(f==0)
cout<<"YES"<<endl;
}
return 0;
}