题目描述
火车站只有一条铁路,所有的火车都停在那里。所以所有的火车都是从一边进站,从另一边出站。如果A列先进入铁路,然后B列在A列离开之前进入铁路,那么A列在B列离开之前不能离开。下图说明了问题所在。车站里最多有9列火车,所有的火车都有一个ID(编号从1到N),火车按照O1的顺序进入火车,火车是否可以按照O2的顺序驶出。
输入
输入包含几个测试用例。
每个测试用例由一个整数(列车数)和两个字符串组成。两个字符串分别为列车入站顺序和列车出站顺序。
3
3 123 321
3 abc cab
3 123 123
输出
Yes
in
in
in
out
out
out
FINISH
No
FINISH
Yes
in
out
in
out
in
out
FINISH
如果不能按照指定顺序出站,输出“No”。
如果可以,输出“Yes”,然后输出出入站顺序(对于进入铁路的列车,应输出“in”,对于出铁路的列车,应输出“out”)。在每个测试用例之后打印一行包含“FINISH”。
#include <iostream>
#include<stack>
using namespace std;
int main()
{
stack <char>train;//火车停靠栈
string a, b;//a存火车入栈顺序,b存出栈顺序
char out[100];//存输出的顺序
int n, t;
cin >> n;
while (n--)
{
int k = 0, i = 0, j = 0;
cin >> t >> a >> b;
train.push(a[j]);//火车入栈
out[k] = '0';
k++;
while (!train.empty())
{
if (train.top() == b[i])//出栈
{
train.pop();
out[k] = '1';
k++;
if (i < t)
i++;
}
else if (j == t - 1)//到最后一辆火车时都不与出站顺序匹配
{
cout << "No" << endl;
break;
}
if (j < t - 1)
{
j++;
train.push(a[j]);
out[k] = '0';
k++;
}
}
if (train.empty())
{
cout << "Yes" << endl;
for (int i = 0; i < k; i++)
{
if (out[i] == '0')
cout << "in" << endl;
else
cout << "out" << endl;
}
}
cout << "FINISH" << endl;
while (!train.empty())//清空堆栈
train.pop();
}
}