题解:CF1948B Array Fix
思路:
因为要判断是否单调不降,所以将这个数组从后往前扫一遍,便会遇到两种情况:
-
前一个数大于后一个数,便考虑将前一个数拆分,如果十位还大于个位,说明拆分后还不能单调不降,输出 NO,否则继续扫下去。
-
前一个数小于等于后一个数,便继续扫。
考虑完这两种情况,便可以愉快地 AC 了。
AC 代码:
#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;
}