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; }