利用两个vector模拟进出站过程,第三个记录是进还是出
#include<cstdio>
#include<algorithm>
#include<stack>
#include<queue>
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n;
char c;
while(~scanf("%d",&n)){
vector<char> one;
vector<char> two;
vector<char> three; ///存0,1 1代表进
for(int i =0;i<n;i++){
cin >> c;
one.push_back(c);
}
for(int i =0;i<n;i++){
cin >> c;
two.push_back(c);
}
stack<char> st;
int t = 0;
int flag = 0;
for(int i = 0;i<n;i++){ ///判断间断入栈的过程
while(st.empty() || st.top()!= two[i]){
if(t<n){
three.push_back(1);
st.push(one[t++]);
}
else break;
}
if(st.top()==two[i]){
three.push_back(0);
st.pop();
}
else if(t==n){
flag = 1;
break;
}
}
if(flag)
cout << "No." << endl;
else{
cout << "Yes." <<endl;
for(int i = 0;i<2*n;i++){
if(three[i])
cout << "in" << endl;
else
cout << "out" << endl;
}
}
cout << "FINISH" <<endl;
}
return 0;
}