//1022.火车调度
//栈的问题
Sample Input
3 123 321
3 123 312
Sample Output
Yes.
in
in
in
out
out
out
FINISH
No.
FINISH
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
int main()
{
int n;
char a[10],b[10];
while(cin>>n)
{
queue<string>s; //queue和stack都没有clear()操作。
stack<int>z;
int i=0,j=0; //指向串a,b的指针
cin>>a>>b;
while(i<n) //原字符串遍历完全时结束
{
while(z.empty()||z.top()!=b[j]) //当栈为空或者栈顶不等于目标字符时入栈
{
z.push(a[i]);
s.push("in"); //将入栈和出栈操作存储在队列queue中(也可以用vector)都可以不定长。
i++;
}
while(!z.empty()&&z.top()==b[j])//由上一个操作知道此时z.top一定满足目标字符串
{ //否则结束,因为可能新的栈顶元素符合条件,所以
z.pop(); //需要用while进行可能的连续出栈 。
s.push("out"); //why》!z.empty(),空栈顶和空数组可能使死循环。
j++;
}
}
if(!z.empty())
cout<<"No."<<'\n'<<"FINISH"<<endl;
else
{
cout<<"Yes."<<'\n';
while(!s.empty())
{
cout<<s.front()<<endl;
s.pop();
}
cout<<"FINISH"<<endl;
}
}
}