放暑假了,小W要乘高铁回家,在火车站,小W看着来来往往的列车,想到了一个问题:在火车出现之初,车站往往只有一条铁轨停靠列车,所有的列车都是从一个方向进入,从另一个方向离开,如果列车A先进入,列车B再进入,B要先离开,A才能离开。如下面图示。小W想:若是最多有9列火车进站(所有火车都有编号1-n),有两个序列是由列车编号组成的,如果所有列车按照序列1的顺序进入,能否按照序列2的顺序离开呢?请你帮助小W解决这个问题。
输入
输入数据有多组,每组数据包含一个整数,是列车数,整数后面是两个序列,代表列车进入的序列1和离开的序列2。输入遇到文件尾结束。
n<=9,火车编号为1~n
输出
如果列车按照序列1进入,能够按照序列2离开,则输出“Yes.”,并输出列车进入和离开的过程(“in"代表进入,“out"代表离开),否则输出"No.”。每个案例结束后输出"FINISH”。
样例输入
3 123 321
3 123 312
样例输出
Yes.
in
in
in
out
out
out
FINISH
No.
FINISH
#include<iostream>
#include<string>
#define MaxSize 9
int q[2* MaxSize],j=0;
using namespace std;
class SqStackClass {
char* data;
int top;
public:
SqStackClass();
~SqStackClass();
void push(char e);
char pop();
char Top();
int empty();
static bool stackwash(string x, string y, int n);
};
SqStackClass::SqStackClass() {
data = new char[MaxSize];
top = -1;
}
SqStackClass::~SqStackClass() {
delete[] data;
}
int SqStackClass::empty() {
if (top == -1)return 1;
else return 0;
}
void SqStackClass::push(char e) {
top++;
data[top] = e;
}
char SqStackClass::pop() {
int e;
if (top == -1) empty();
e = data[top];
top--;
return e;
}
char SqStackClass::Top() {
if (top == -1) empty();
return data[top];
}
bool SqStackClass::stackwash(string x, string y, int n) {
SqStackClass a;
int p = 0;
for (int i = 0; i < n; i++) {
a.push(x[i]);
q[j++] = 0;
while (a.Top() == y[p] && a.empty() == 0) {
q[j++] = 1;
a.pop();
p++;
}
}
if (a.empty() == 1) return true;
else return false;
}
int main() {
int n;
string x, y;
while (cin >> n>>x>>y) {
if (SqStackClass::stackwash(x, y, n))
{
cout << "Yes." << endl;
for (int i = 0; i < j; i++) {
if (q[i] == 0)
cout << "in" << endl;
else cout << "out" << endl;
}
cout << "FINISH" << endl;
j = 0;
}
else
{
cout << "No." << endl << "FINISH" << endl;
j = 0;
}
}
return 0;
}