Problem Description
假设杭州东火车站只有一条铁路,并且所有火车都从一侧进来,从另一侧出去。那么,如果火车A先进站,然后火车B在火车A离开之前就进站,那么火车A直到火车B离开后才能离开,可参见下图。
现在,假设车站中有n(n<=9)列火车,所有火车都有一个ID(从1到n的编号),火车以O1的顺序进站,您的任务是确定火车是否可以按O2顺序出站。
Input
输入包含几个测试用例。
每个测试用例均包含三部分:一个表示火车数量的整数和两个字符串O1和O2,其中,火车的进站顺序用O1串表示,火车的出站顺序用O2串表示。
输入在文件末尾终止,更多信息参见样例。
Output
如果不能从O1的入站顺序得到O2的出站顺序,请输出字符串“ No.”。
如果能够得到,则请输出”Yes.”
然后输出进站和出站的具体方式(“in”表示火车进站,“out”表示火车出站)。
在每个测试用例之后输出一行“ FINISH”。
更多信息参见样例。
输入样例
3 123 321
3 123 312
输出样例
Yes.
in
in
in
out
out
out
FINISH
No.
FINISH
附带ac代码
#include<iostream> #include<stack> #include<vector> #include<algorithm> using namespace std; int main() { int n; string s1,s2; stack<int> s; vector<string> v; int flag; while(cin>>n) { cin>>s1>>s2; flag=0; while(!s.empty()) s.pop(); v.clear(); for(int i=0;i<n;++i) { s.push(s1[i]-'0'); v.push_back("in"); //cout<<s.top()<<"和"<<(s2[flag++]-'0')<<endl; while(!s.empty()&&s.top()==(s2[flag]-'0')) { flag++; v.push_back("out"); s.pop(); } } if(s.empty()) { cout<<"Yes."<<endl; for(int i=0;i<v.size();++i) cout<<v[i]<<endl; cout<<"FINISH"<<endl; } else { cout<<"No."<<endl; cout<<"FINISH"<<endl; } } return 0; }