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;
}