题意:
给你一个数n代表车辆个数,然后n个数,代表依次进站的
车号,最后是n个数代表最终符合要求的出站顺序(按照车号排)
分析:
进站问题就想到了stl中的queue,由于输入的一串数是没有间隔的
所以用string类型来保存一串车号比较方便,由于最后还要输出
每次是进站还是出站,所以可以用bool类型的vector来保存答案。
//AC代码,对stl还不熟悉,参考了别人的代码,果然要多用才可以。
#include <iostream>
#include <cstdio>
#include <stack>
#include <queue>
#include <string>
#include <vector>
using namespace std;
string si,so;
stack<char> st;
vector<bool> ans;
int main()
{
int n;
while(~scanf("%d",&n))
{
ans.clear();//每次输入都要清空一下string、vector
si.clear();//保存进站的顺序
so.clear();//记录出站顺序
cin>>si>>so;
int i=0,j=0;
while(st.size())//清空栈
st.pop();
st.push(si[i]);//先把第一个放进栈
ans.push_back(true);//在结果中记录一下
while(i<n&&j<n)
{
if(st.size()&&st.top()==so[j])//如果还有车可以出站,并且当前出站的车号符合要求
{
st.pop();//就让当前车出站
ans.push_back(false);//紧跟着记录一下
j++;
}
else//如果没有车可以出站了,或是此时出栈的话不合条件 ,就再放一辆车进栈
{
i++;
if(i==n) break;//看是否可以再进栈
st.push(si[i]);//否则可以进站
ans.push_back(true);//记录
}
}
//if(i==n)//如果找到了第n个说明要求还没达到
if(j!=n)//也可以写成这个,j!=n说明第n个车号还没有达成
printf("No.\n");
else
{
printf("Yes.\n");
vector<bool>::iterator it;
for(it=ans.begin();it!=ans.end();it++)
{
if(*it)
printf("in\n");
else
printf("out\n");
}
}
printf("FINISH\n");
}
return 0;
}