1. 程式人生 > >DS線性結構—火車問題 (Ver. I)

DS線性結構—火車問題 (Ver. I)

題目描述

某火車站只有一條鐵軌供火車停靠,所有的列車都從一側進入,從另一側出來。如果此時,列車A首先進入鐵路,然後列車B在列車A離開之前進入鐵路,則列車A不能離開,直到列車B離開(如下圖所示)。車站最多有9列火車,所有火車都有一個ID(編號從1到n),列車按照Order1的順序進入鐵路,你需要確定列車可以以Order2的順序從地鐵站離開。

輸入

測試資料有多組
每組包含一個整數N和兩個字串O1,O2,N代表列車數量(1 <= N <= 9),O1代表進站順序,O2代表出站順序

輸出

對於每組資料
首先輸出一行"Yes."或"No.",代表能否由當進站順序為O1時,出站順序O2能否實現
若能實現,給出你的實現方法,其中"in"為列車進站,"out"為列車出站。

最後輸出一行FINISH。

具體輸出見樣例。

樣例輸入

3 123 321 3 123 312

樣例輸出

Yes. in in in out out out FINISH No. FINISH

 

#include <iostream>
#include <stack>
#include <string>

using namespace std;
void test(int m)
{
    int n=m;
    string o1,o2;
    stack<char> T;
    cin>>o1>>o2;
    char p;
    string k;
    int j=0;
    for(int i=0;i<o1.length()&&j<o2.length();)
    {
        p=o1[i];
        T.push(p);
        i++;
        k+="in\n";
        while(!T.empty())
        {
            if(T.top()==o2[j])
            {
                T.pop();
                k+="out\n";
                j++;
            }
            else
                break;
        }
    }
    if(T.empty()||j==o2.length())
    {
        cout<<"Yes."<<endl;
        cout<<k;
    }
    else
        cout<<"No."<<endl;

}

int main()
{
    int n;
    while(cin>>n)
    {
        test(n);
        cout<<"FINISH"<<endl;
    }
    return 0;
}