InputThe 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.
OutputThe 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 321 3 123 312Sample Output
Yes. in in in out out out FINISH No. FINISH 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.".Hint
Hint
题目的大意: O1指的是进栈顺序,判断是否能以O2的方式输出;
分析:,进栈是可以边进边出栈.所以没进入一个元素就要判断当前元素是否满足出栈条件,判断的时候要用while循环。直到栈栈顶元素不满足出栈条件为止,
还有一点就是路径的记录, 可以开一个数组或者队列,进栈放1,出栈放0 当 输出yes的时候可以输出路径
AC代码:
1 #include<iostream> 2 #include<stack> 3 #include<queue> 4 #include<string> 5 using namespace std; 6 int main() 7 { 8 int n; 9 while(cin>>n){ 10 queue<int >que; 11 string a,b; 12 cin>>a>>b; 13 stack<int >s; 14 int pos=0; 15 for(int i=0;i<n;i++) 16 { 17 s.push(a[i]); 18 que.push(1); 19 while(s.size()&&s.top()==b[pos]) 20 { 21 s.pop(); 22 que.push(0); 23 pos++; 24 } 25 } 26 if(pos==n) 27 { 28 printf("Yes.\n"); 29 while(que.size()) 30 { 31 if(que.front()==1) 32 { 33 printf("in\n"); 34 que.pop(); 35 } 36 else { 37 printf("out\n"); 38 que.pop(); 39 } 40 } 41 printf("FINISH\n"); 42 } 43 else { 44 printf("No.\n"); 45 printf("FINISH\n"); 46 } 47 } 48 return 0; 49 }