主要的题意是输出火车进站出站的顺序,如果不符合条件的话就结束。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
#define Max 100
using namespace std;
int main()
{
stack<char>Q;
int i,j,n,k,re[Max]; //n为列车数,re表示结果,1表示进栈,0表示出栈
char str1[Max],str2[Max]; //序列1和序列2
while(~scanf("%d%s%s",&n,str1,str2))
{
i=0;
j=0;
k=1;
Q.push(str1[0]); //为防止栈空,压1个进去
re[0]=1; //记录进了一个
while(i<n&&j<n)
{
if(Q.size()&&Q.top()==str2[j]) //若栈顶元素与序列2当前的元素相等,则弹栈,序列2集团向后移一位
{
j++;
Q.pop();
re[k++]=0;
}
else //否则从序列1中取当前元素压入栈中
{
if(i==n) break;
Q.push(str1[++i]);
re[k++]=1;
}
}
if(i==n) //若i==n表示栈顶元素不等于序列2当前的元素,且序列1中元素都已经入过栈,判断不能得到序列2一样的答案
{
printf("No.\n");
}
else
{
printf("Yes.\n");
for(i=0; i<k; i++)
{
if(re[i])
printf("in\n");
else printf("out\n");
}
}
printf("FINISH\n");
}
return 0;
}