


3 123 321 3 123 312
Yes. in in in out out out FINISH No. FINISHFor the first Sample Input, we let train 1 get in, then train 2 and train 3. So now train 3 is at the top of the railway, so train 3 can leave first, then train 2 and train 1. In the second Sample input, we should let train 3 leave first, so we have to let train 1 get in, then train 2 and train 3. Now we can let train 3 leave. But after that we can‘t let train 1 leave before train 2, because train 2 is at the top of the railway at the moment. So we output "No.".HintHint
看到英文题就头痛的啊。。。
于是我就看了输入输出例子 没有读题。。果然wa了。。
只有顶着头皮去看了。。o(︶︿︶)o 唉
给你三个数据 一个是n 表示共有几辆火车,o1是火车的进站顺序,o2是出站顺序,
问按照o1的进站顺序 能不能达到o2的出战顺序。。
用栈模拟火车进出站把、、、
看代码:
#include <stdio.h>
#include <stack>
using namespace std;
int main()
{
char str[15],str1[15],ch;
int a[25],n;//a数组1进站0表示出站
stack<char>s;
while(scanf("%d",&n)!=EOF)
{
scanf("%s",str);
scanf("%s",str1);
while(!s.empty())
s.pop();
s.push('A');//避免第一次访问栈顶访问到不该访问的地方、、
int q=0,t=0,flag=0;
for(int i=0;i<n;i++)
{
ch=str1[i];
if(!flag)
{
while(s.top()!=ch&&q<=n)//如果需要出站的火车不在栈顶,继续进火车
s.push(str[q]),q++,a[t++]=1;
if(s.top()==ch&&!s.empty())//找到了火车出站
a[t++]=0,s.pop();
else//火车进完了还没有找到需要出站的。。
flag=1;
}
if(q==n+1)
flag=1;
}
if(flag)
printf("No.\nFINISH\n");
else
{
printf("Yes.\n");
for(int i=0;i<t;i++)
{
if(a[i]==1)
printf("in\n");
else
printf("out\n");
}
printf("FINISH\n");
}
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/su20145104009/article/details/47292311