hdu 1022 Train Problem Ⅰ 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022
数据结构 模拟水
题目大意:给出一个进栈序列,一个出栈序列,问是否存在一个进出序列,使得两给出序列都是此列的子列。
题目分析:套用大神原话
//此题不真正的仔细读难理解出事栈的应用,容易想成反序相等就yes的问题,此题题意是说输入的两列字符串,第一列表示进入的顺序,第二列表示出去的顺序,问你是否符合后进先出。
//举出一列数据 7 1234567 4321576
//上面数据应该是 in in in in out out out out in out in in out out;
code:
#include<iostream>
#include<string>
#include<stack>
#include<vector>
using namespace std;
const int MAX=310;
int main()
{
int i,j,n;
char in[MAX],out[MAX];
stack<int>s;
vector<string>stl;
while(cin>>n>>in>>out)
{
i=j=0;
while(i<n)
{
s.push(in[i++]);
stl.push_back("in\n");
while(!s.empty()&&s.top()==out[j]&&j<n)
{
j++;
s.pop();
stl.push_back("out\n");
}
}
if(s.empty())
{
cout<<"Yes."<<endl;
for(i=0;i<stl.size();i++)
{
cout<<stl[i];
}
cout<<"FINISH"<<endl;
}
else cout<<"No."<<endl<<"FINISH"<<endl;
stl.clear();
while(!s.empty())
{
s.pop();
}
}
return 0;
}
PS:确实挺考验数据结构知识的……