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
#include<cstdio> #include<cstring> #include<stack> #include<iostream> using namespace std; int main() { int n,j, k, flag[50]; //flag数组记录入栈出栈顺序 char s1[15], s2[15]; stack <char> s; while(~scanf("%d %s%s",&n,s1,s2)) { while(!s.empty()) s.pop(); memset(flag,-1,sizeof(flag)); j = k = 0; for(int i=0;i<n;i++) { s.push(s1[i]); flag[k++]=1; while(!s.empty()&&s.top()==s2[j]) //如果栈不为空并且栈顶元素等于当前出栈的元素! { s.pop(); //出栈 flag[k++]=0; //标记出栈 j++; //记录出栈次数 } } if(j==n) { printf("Yes.\n"); for(int i=0;i<k;i++) { if(flag[i]) { printf("in\n"); } else { printf("out\n"); } } } else { printf("No.\n"); } printf("FINISH\n"); } return 0; }
HDU-1022-Train Problem I(C++ && 简单堆栈)
原文地址:http://blog.csdn.net/qq_16542775/article/details/45818235