题目地址:点击打开链接
题意:来了一堆火车,看通过栈能否由初始顺序到达目标顺序,能就输出yes并输出进出操作,否则输出no
思路:用栈模拟一下就行,用visit记录顺序即可,每次栈要清空,入门经典说过这道题,简单改了一下
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
using namespace std;
char s1[15],s2[15];
int visit[15];
int main()
{
int n,i,j,k;
stack<char> stack1;
while(scanf("%d%s%s",&n,s1,s2) != EOF)
{
while(!stack1.empty())
stack1.pop();
i = 0;
j = 0;
k = 0;
int ok = 1;
while(j < n)
{
if(s1[i] == s2[j])//这里记得加visit数组,模拟直接进来就出
{
visit[k++] = 1;
visit[k++] = 2;
i++;
j++;
}
else if(!stack1.empty() && stack1.top() == s2[j])
{
visit[k++] = 2;
j++;
stack1.pop();
}
else if(i < n)
{
visit[k++] = 1;
stack1.push(s1[i]);
i++;
}
else
{
ok = 0;
break;
}
}
if(ok)
{
printf("Yes.\n");
for(i=0; i<2*n; i++)
{
if(visit[i] == 1)
printf("in\n");
else if(visit[i] == 2)//这里多加else if语句是为了其他意向不到的情况,其实直接else就行
printf("out\n");
}
}
else
printf("No.\n");
printf("FINISH\n");
}
}