4 美丽数列

小明是个普通的计算机本科生,很喜欢研究数组相关的问题。在他的认知里,美丽的数组是这样的,对于一个长度为n的数组a,存在一个下标i(1<=i<=n)使得1i之间的数是严格递增的,i+1n之间的数是严格递减的。现在这个数组a里的元素是随机给定的(这个数组可能是不美丽的),对于数组a内的任意一个元素ai我们可以进行若干次ai=ai-1(ai>0)的操作,问能否通过若干次操作使得这个数组变得美丽。
输入格式:

第一行输入数组长度n (1≤n≤3*1e5), 第二行输入n个整数a1,…,an (0≤ai≤1e9)。
输出格式:

输出“Yes”表示这个数组可以变美丽,输出“No”表示不可以。

输入样例:

3
1 0 1

输出样例:

No

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;cin>>n;
	int a[n],t[n];
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	for(int i=0;i<n;i++){//找下标i
		for(int k=0;k<n;k++)	t[k]=a[k];//每次循环都会改变数组 
		int flag=1;
		for(int j=i;j>0;j--){//下标左边严格递增 
			if(t[j]<t[j-1]){
				t[j-1]=t[j]-1;
				if(t[j-1]<0){
					flag=0;
				}
			}
			if(!flag)	break;
		}
		if(!flag)	continue;//左边递增已经不成立了,直接下一轮循环 
		for(int j=i;j<n-1;j++){//若左边递增成立,右边严格递减 
			if(t[j]<=t[j+1]){
				t[j+1]=t[j]-1;
				if(t[j+1]<0){
					flag=0;
				}
			}
			if(!flag)	break;
		}
		if(flag){
			cout<<"Yes"<<endl;
			return 0;
		}
	}
	cout<<"No"<<endl;
	return 0;
} 
发布了23 篇原创文章 · 获赞 8 · 访问量 1370

猜你喜欢

转载自blog.csdn.net/qq_45550552/article/details/104601119