题解:CF1948B Array Fix

思路:

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

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

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

考虑完这两种情况,便可以愉快地 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;
}
posted @ 2024-03-22 18:26  IOI_official  阅读(16)  评论(0)    收藏  举报  来源