DS线性表--火车问题

题目描述
某火车站只有一条铁轨供火车停靠,所有的列车都从一侧进入,从另一侧出来。如果此时,列车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>
using namespace std;
 
int main(){
     
    int n;
    string in, out;
     
    while(cin>>n>>in>>out){
        stack<char> st;
        string str= "";
        int out1= 0;
        int in1= 0;
        for(int  i= 0; i< n*2; i++){
             
            if(!st.empty()&&st.top()== out[out1]){
                //cout<<st.top()<<endl;
                st.pop();
                out1++;
                str+= "out";
            }
            else if(in1< n){
                st.push(in[in1++]);
             
                str += "in";
            }
 
             
              
        }
        //cout<<str<<endl;
        if(st.empty()){
            cout<<"Yes."<<endl;
            int len= str.length();
            for(int i= 0; i< len;){
                if(str[i]== 'i'){
                    cout<<"in"<<endl;
                    i+= 2;
                }
                if(str[i]== 'o'){
                    cout<<"out"<<endl;
                    i+= 3;
                }
            }
        }
        else
         cout<<"No."<<endl;
        cout<<"FINISH"<<endl;
    }
     
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41879093/article/details/82763059