【出栈顺序判断】 Rails

传送门

题意

多组样例,每次输入一个\(N\),表示栈的长度,等于0时候终止输入,然后每次输入\(1\sim N\)的一个排列,判断能否通过\(1\sim N\)的入栈顺序输出

数据范围

\(1\leq N\leq 1000\)

题解

模拟入栈,只要当前栈顶等于给定的排列就一直出栈,最后判断栈是否为空及给定的排列是否取尽即可

Code

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define close ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n;
void solve(){
    int a[1010];
    while(cin >> a[1], a[1]){
        rep(i, 2, n + 1) 
            cin>>a[i];
        int stk[1010], tot = 0;
        
        int j = 1;
        rep(i, 1, n + 1){
            stk[++tot] = i;
            while(tot && stk[tot] == a[j])  
                tot--, j++;
        }
        cout << ((j == n + 1 && tot == 0) ? "Yes\n" : "No\n");
    }
    cout << endl;
}
int main(){
    close
    while(cin >> n && n) solve();
}

// 5
// 1 2 3 4 5
// 5 4 1 2 3
// 0
// 6 
// 6 5 4 3 2 1
// 0
// 0
posted @ 2020-08-03 09:15  Hyx'  阅读(100)  评论(0编辑  收藏  举报