杭电 1022【火车的出栈入栈】

来源:互联网 发布:卡通人物在线设计软件 编辑:程序博客网 时间:2024/05/16 17:56

Train Problem I

Problem Description
As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the Ignatius Train Station is the fastest all over the world ^v^). But here comes a problem, there is only one railway where all the trains stop. So all the trains come in from one side and get out from the other side. For this problem, if train A gets into the railway first, and then train B gets into the railway before train A leaves, train A can't leave until train B leaves. The pictures below figure out the problem. Now the problem for you is, there are at most 9 trains in the station, all the trains has an ID(numbered from 1 to n), the trains get into the railway in an order O1, your task is to determine whether the trains can get out in an order O2.
 

Input
The input contains several test cases. Each test case consists of an integer, the number of trains, and two strings, the order of the trains come in:O1, and the order of the trains leave:O2. The input is terminated by the end of file. More details in the Sample Input.
 

Output
The output contains a string "No." if you can't exchange O2 to O1, or you should output a line contains "Yes.", and then output your way in exchanging the order(you should output "in" for a train getting into the railway, and "out" for a train getting out of the railway). Print a line contains "FINISH" after each test case. More details in the Sample Output.
 

Sample Input
3 123 3213 123 312
 

Sample Output
Yes.inininoutoutoutFINISHNo.FINISH
Hint
Hint
For the first Sample Input, we let train 1 get in, then train 2 and train 3.So now train 3 is at the top of the railway, so train 3 can leave first, then train 2 and train 1.In the second Sample input, we should let train 3 leave first, so we have to let train 1 get in, then train 2 and train 3.Now we can let train 3 leave.But after that we can't let train 1 leave before train 2, because train 2 is at the top of the railway at the moment.So we output "No.".
  
/**火车的出栈入栈问题**注意测试用例给的不完整,可能出现进出次数大于进出车数的情况即in.in.out.out.in.out类似的情况。**输入进出次数  进站顺序 出栈顺序*3 123 3213 123 312*Yes.inininoutoutoutFINISHNo.FINISH*/#include<iostream>//用到栈时所必须声明的头文件#include<stack>    using namespace std;int main(){//定义一个栈sstack<char> s;//因为题目给定总共不超过9个车入站,所以进站数组in,出站数组out定值为10char in[10],out[10],flag[20];//n中存放进站的数量,flag数组中负责记录进站出站的情况,i,j,k为方便运算的变量int n,i,k,j;//通过while循环,循环进行出站入站处理while(cin>>n>>in>>out){//每一次运算之前,负责k作为flag记录中会用到的变量,j作为已出站的火车数量的记录,都需清零处理k=0;j=0;//如果运算之前栈内不为空,则持续出栈处理,直到栈清空while(!s.empty()){s.pop();}//通过n以内的for循环对火车出站入站进行处理for(i=0;i<n;i++){//将进站数组in中的值按顺序入栈s.push(in[i]);//入栈处标记为1,k自增以便记录下一个状态flag[k++]='1';//如果栈不为空,并且此时栈顶的车次与目前出站次序的车次相符,则出站即出栈处理,直到栈内的车次不符合出站车次,或栈已空while(!s.empty()&&s.top()==out[j]){//出站即出栈处理s.pop();//出栈处标记为0,k自增以便记录下一个状态flag[k++]='0';j++;}}//如果可以出站的车数与入站的车数相符,则认为这样的入站出站安排是可行的if(j==n){//按照格式要求输出'YES.'cout<<"Yes."<<endl;//因为k在flag记录后会自增1,所以for循环时i应该小于k,通过for循环对flag中记录的出站入站进行输出for(i=0;i<k;i++){if(flag[i]=='1'){cout<<"in"<<endl;}if(flag[i]=='0'){cout<<"out"<<endl;}}}//如果可以出站的车数与入站车数不相符,则说明这样的入站出站安排是不可行的,则按要求输出'NO.'else{cout<<"No."<<endl;}//最后按格式要求输出FINISHcout<<"FINISH"<<endl;}return 0;}


0 0
原创粉丝点击