//1022.火车调度 //栈的问题 Sample Input 3 123 321 3 123 312 Sample Output Yes. in in in out out out FINISH No. FINISH #include <iostream> #include <stack> #include <queue> using namespace std; int main() { int n; char a[10],b[10]; while(cin>>n) { queue<string>s; //queue和stack都没有clear()操作。 stack<int>z; int i=0,j=0; //指向串a,b的指针 cin>>a>>b; while(i<n) //原字符串遍历完全时结束 { while(z.empty()||z.top()!=b[j]) //当栈为空或者栈顶不等于目标字符时入栈 { z.push(a[i]); s.push("in"); //将入栈和出栈操作存储在队列queue中(也可以用vector)都可以不定长。 i++; } while(!z.empty()&&z.top()==b[j])//由上一个操作知道此时z.top一定满足目标字符串 { //否则结束,因为可能新的栈顶元素符合条件,所以 z.pop(); //需要用while进行可能的连续出栈 。 s.push("out"); //why》!z.empty(),空栈顶和空数组可能使死循环。 j++; } } if(!z.empty()) cout<<"No."<<' '<<"FINISH"<<endl; else { cout<<"Yes."<<' '; while(!s.empty()) { cout<<s.front()<<endl; s.pop(); } cout<<"FINISH"<<endl; } } }