UVA - 514 Rails 经典栈使用

来源:互联网 发布:js设置button颜色 编辑:程序博客网 时间:2024/05/17 04:13

题目大意:有一列n节车厢的火车要入栈,车厢从1到n,只能从小到大入栈。
现在给出一个出栈顺序,问能否实现

解题思路:如果栈顶元素大于要出栈的数,肯定就不能实现了。
如果栈顶元素小于要出栈的数,就继续入栈
如果栈定元素等于要出栈的数,就出栈

#include<cstdio>#include<algorithm>#include<stack>using namespace std;#define maxn 1010int num[maxn], n;void solve() {    bool flag = true;    int cnt = 2;    stack<int> S;    S.push(1);    for(int i = 0; i < n; i++) {        if(S.empty()) {            if(cnt == n + 1) {                flag = false;                break;            }            S.push(cnt);            cnt++;        }        if(num[i] > S.top()) {            S.push(cnt);            cnt++;            i--;        }        else if(num[i] == S.top()){            S.pop();        }        else {            flag = false;            break;        }    }    if(!flag)        printf("No\n");    else        printf("Yes\n");}int main() {    while(scanf("%d", &n) == 1 && n) {        int t, x;        while(1){            scanf("%d", &num[0]);            if(!num[0])                break;            for(int i = 1; i < n; i++)                scanf("%d", &num[i]);            solve();        }        printf("\n");    }    return 0;}
0 0
原创粉丝点击