题意:给定一个长度为n的数串,求是否能经过栈处理后按照第二个串的顺序输出;
思路:水题,直接模拟
代码:
#pragma comment(linker, "/STACK:102400000,102400000")
#include "iostream"
#include "cstring"
#include "algorithm"
#include "cmath"
#include "cstdio"
#include "sstream"
#include "queue"
#include "vector"
#include "string"
#include "stack"
#include "cstdlib"
#include "deque"
#include "fstream"
#include "map"
using namespace std;
typedef long long LL;
const int INF = 0x1fffffff;
const int MAXN = 1000000+100;
#define eps 1e-14
int main()
{
int n;
string train1,train2;
stack<char> q;
queue<string> out;
while(cin >> n)
{
int i=0,j=0;
cin >> train1 >> train2;
while(!q.empty())
q.pop();
while(!out.empty())
out.pop();
while(i != train1.size()) //入站总是顺序的,所以最后一个入站完毕后就可以退出了
{
q.push(train1[i++]);
out.push("in");
while(!q.empty() && q.top() == train2[j]) //能出站的全出站
q.pop() , j++ , out.push("out");
}
if(q.empty()) //如果栈没空,说明有火车永远走不出站,方案不可行
{
cout << "Yes." << endl;
while(!out.empty())
{
cout << out.front() << endl;
out.pop();
}
}
else
cout << "No." << endl;
cout << "FINISH" << endl;
}
return 0;
}