5487: 栈之应用

    科技2025-01-12  8

    放暑假了,小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; }
    Processed: 0.012, SQL: 8