3 123 321 3 123 312
Yes. in in in out out out FINISH No. FINISHFor 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.".HintHint
//栈的应用
#include <iostream> #include <stack> #include <cstdio> #include <cstring> using namespace std; stack<int> S; int main() { int n,i,j,k; bool flag[10000]; string in,out; while(~scanf("%d%*c",&n)) { cin >> in >> out; i = j = k = 0; while(j<n+1 && i<n) { if(!S.empty() && S.top() == out[i]) { i++; flag[k] = true; k++; S.pop(); } else { S.push(in[j]); flag[k] = false; j++; k++; } } if(k!=2*n) { cout << "No." << endl; } else { cout << "Yes." << endl; for(i = 0; i<k; i++) { if(flag[i]) cout << "out" << endl; else cout << "in" << endl; } } cout << "FINISH" << endl; } return 0; }