0
点赞
收藏
分享

微信扫一扫

出栈合法性 计蒜客 - T1565

fbd4ffd0717b 2022-04-04 阅读 67
c++

出栈合法性 计蒜客 - T1565

问题描述

已知自然数 1, 2, …, N(1≤N≤100)依次入栈,请问序列 C1,C2,…,CN是否为合法的出栈序列。

输入格式
输入包含多组测试数据。
每组测试数据的第一行为整数 N(1≤N≤100),当 N=0 时,输入结束。
第二行为 NN 个正整数,以空格隔开,为出栈序列。

输出格式
对于每组输入,输出结果为一行字符串。
如给出的序列是合法的出栈序列,则输出"Yes",否则输出"No"。

样例输入

5
3 4 2 1 5
5
3 5 1 4 2
0

样例输出

Yes
No
  • 参考程序
#include<iostream>
#include<algorithm>
using namespace std;
const int N=110;
int a[N], sta[N],head=0,pre=0;
int main(){
    //freopen("data.in","r",stdin);
    int n;
    while(cin>>n){
        if(n==0) break;
        for(int i=1;i<=n;i++) cin>>a[i];
        head=0,pre=1;
        for(int i=1;i<=n;i++){
            pre=max(pre,a[i-1]+1);//原本应该出现的元素 
            if(a[i]>pre){//升序入栈 
                for(int j=pre;j<a[i];j++){
                    sta[++head]=j;
                }
            }else if(a[i]==sta[head]){
                --head;
            }
        }
        if(head>0) cout<<"No\n";
        else cout<< "Yes\n";
    }
    return 0;
}
举报

相关推荐

0 条评论