同样的跑火车问题,这次改变了循环停止的条件,使用了我之前就一直想用的2*N次循环,发现果然是可以的。
顺利的1A很开心。
利用栈模拟车站,利用队列记录进出站的顺序,代码会比较高效。
#include <iostream>
#include<stack>
#include<queue>
#include<string.h>
using namespace std;
int main()
{
int N ;
int pointin, pointout ;
stack<char> s ;
queue<int> q ;
char in[11], out[11] ;
while(cin >> N)
{
while(!s.empty())
s.pop();
while(!q.empty())
q.pop();
pointin = 0, pointout = 0 ;
cin >> in >> out ;
for(int i = 1 ; i<= 2*N ; i++)
{
if(!s.empty()&&s.top()==out[pointout])
{
pointout++ ;
s.pop();
q.push(0);
continue ;
}
else if(pointin < N)
{
s.push(in[pointin]);
pointin++;
q.push(1);
continue ;
}
else
continue;
}
if(pointin==N&&pointout==N)
{
cout << "Yes." << endl ;
while(!q.empty())
{
if(q.front()==1)
{
cout << "in" << endl ;
q.pop();
}
else
{
cout << "out" << endl ;
q.pop();
}
}
cout << "FINISH" << endl ;
}
else
cout << "No." << endl << "FINISH" << endl ;
}
return 0;
}