题目描述
有n列火车按照1,2,3...n的顺序排列,现所有的火车需要掉头,所以需要火车先驶入一个调度站,再开出来。
由于只有一根铁轨,所以要么最前面的一辆火车进去调度站,要么调度栈内最上面一辆火车开出调度栈。
现给定一个出调度站的,顺序,判断是否合理
输入格式
第一行n,第二行1--n的排列
输出格式
如果出站顺序合理,输出“YES”,否则输出“NO”
样例 #1
样例输入 #1
3
3 1 2
样例输出 #1
NO
提示
数据范围:n<=10000;
思路
我原本想的是用暴力枚举来看有没有输入的这种,但后来推出了栈内元素出栈的规律,那就是
出栈序列中的每个数后面的比它小的数,是按递减排列的。
基于此,我们就可以写出一下代码
#include<bits/stdc++.h>
using namespace std;
int a[10010],cnt;
int main(){
	int n;
	cin>>n;
	for (int i=0;i<n;i++){
		cin>>a[i];
	}
	for (int i=0;i<n;i++){
		cnt=a[i];
		for (int j=i+1;j<n;j++){
			if (a[i]>a[j]){
				if (a[j]<cnt){
				cnt=a[j];
			    }else {
			    	cout<<"NO";
			    	return 0;
				}
			}
		}
	}
	cout<<"YES";
	return 0;
}
看了这么久,作者也写了这么久,能不能点一个赞,在收藏一下呢?最好的话在点个关注吧
谢谢啦!











