2020/3/6 美丽数组

题目

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

思路分析

1、我们通过对题目的解读,可以知道,每一个折点i都会对数组其他元素产生特定的最低要求,只需要对数组中的每一个元素进行判断,若该元素小于其特定要求,则不满足条件,需对下一个a[i]进行重复判断。
2、最终只需判断i在所给的数组中即可。

代码

#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	int n,k,i,j;
	cin>>n;
	int a[n];
	for(i=0;i<n;i++)cin>>a[i];
	for(i=0;i<n;i++)//求a[i]的最低要求 
	{
		k=(n-1+abs(n-1-2*i))/2;
		if(a[i]<k)continue;
		for(j=0;j<i;j++)
		if(a[j]<j)break;
		if(j!=i) continue;
		for(j=n-1;j>i;j--)
		if(a[j]<n-j-1)break;
		if(j!=i) continue;
		break;
	}
	if(i<n)cout<<"Yes"<<endl;
	else cout<<"No"<<endl;
	return 0;
}
posted @ 2020-03-06 17:23  刘凌斌  阅读(267)  评论(0编辑  收藏  举报