题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1022
题目大意:
车的进出站问题,先给出N个火车,再按序列一的方式进站,判断能否以序列二的方式出站,若能先输出“Yes.”,再输出出站步骤,以FINISH结束,若不能,输出“No.”,仍以FINISH结束。
思路:
直接模拟栈,注意细节!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + ;
const int INF = << ;
int T, n, m;
int v[];
int main()
{
string s1, s2;
while(cin >> n >> s1 >> s2)
{
int j = ;
int tot = , ok = ;
stack<char>q;
for(int i = ; i < s1.size(); i++)
{
q.push(s1[i]);
v[tot++] = ;
while(!q.empty() && q.top() == s2[j])//一开始将j++写在这里,是错的,因为每次判断条件都会加一
{
q.pop();
v[tot++] = ;
j++;
}
}
if(j == n && tot == * n)printf("Yes.\n");
else printf("No.\n");
if(j == n && tot == * n)
{
for(int i = ; i < tot; i++)if(v[i])printf("in\n");
else printf("out\n");
}
printf("FINISH\n");
}
return ;
}