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;
}

猜你喜欢

转载自blog.csdn.net/weixin_40673608/article/details/83069719
今日推荐