HDOJ HDU 1022 Train Problem I

来源:互联网 发布:基尼系数统计学算法 编辑:程序博客网 时间:2024/05/19 03:46

HDOJ 1022 Train Problem I

题目

点此查看 HDOJ 1022 Train Problem I

分类

数据结构 栈 (zhàn)

题意

经典 栈问题 火车车厢出入问题
给车厢数 入栈序列 出栈序列
求 是否正确 正确求 出入栈顺序
详细解释见原题

题解

模拟出入栈
按 入栈顺序 模拟入栈
当 栈顶 为 最先出栈元素 时 出栈 并 检查下一个出栈元素

例 3 123 312

当前火车 栈 最先出栈元素 出栈序列 123 - 3 - 23 1 3 - 3 21 3 - - 3 21 3 - - 2 1 1 3

由上
第四步 栈顶元素相等与出栈顺序相等 出栈
而 第五步 不等 出栈序列有误
故输出
No.
FINISH

技巧

需要输出出入栈顺序
可以用字符串 记录火车出入顺序
只有两种状态 故用 0 1 区分

代码

#include <iostream>#include <stack>using namespace std;int main(){    int n,al,bf;    bool f;    string a,b;    string res;    stack<char> train;    while(cin >> n >> a >> b)    {        f = true;        al = 0;        bf = 0;        while(bf != b.length())        {            if(train.empty())            {                train.push(a[al++]);                res += '0';            }            while(train.top() != b[bf])            {                if(al < a.length())                {                    train.push(a[al++]);                    res += '0';                }                else                {                    cout << "No." << endl;                    cout << "FINISH" << endl;                    f = false;                    break;                }            }            if(!f)                break;            train.pop();            res += '1';            bf++;        }        if(f)        {            cout << "Yes." << endl;            for(int i = 0;i < res.length();i++)                if(res[i] == '0')                    cout << "in" << endl;                else cout << "out" << endl;            cout << "FINISH" << endl;        }        res.clear();        while(!train.empty())            train.pop();     }    return 0;}
原创粉丝点击