题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022
-----------------------------------------------------------------------------------
题意:火车进出站,可看作不同的数字的按一定顺序进栈,能否按所要求的顺序出栈。
思路:将出栈顺序保留着数组中,进栈顺序,只要目前的元素不为出栈顺序的数组的值,就进栈。如123 321。因为1不等于3,进栈。2不等于3,进栈。3等于3,进栈再出栈。
注意:一定要判断出栈的值,简单的栈为空不能说明任何情况。
代码:
#include<cstdio> #include<stack> #include<string> using namespace std; int N =0; stack<char> s; int main(void){ while(~scanf("%d",&N)){ while(!s.empty()) s.pop(); char a[N]={0}; char b[N]={0}; getchar(); for(int i =0;i<N;i++){ scanf("%c",&a[i]); } getchar(); for(int i =0;i<N;i++){ scanf("%c",&b[i]); } int flag[N*N+5]={0}; int t =1; int count =0; int ac = 1; flag[0] =1; s.push(a[0]); while(1){ if(!s.empty()&&s.top()==b[count]){ s.top(); s.pop(); count++; flag[t]=2; t++; } else if(ac<N){ s.push(a[ac]); ac++; flag[t]=1; t++; } if(count ==N) break; if(ac == N &&(s.top()!=b[count])) {break;} } if(ac>count){ printf("No.\n"); printf("FINISH\n"); }else{ printf("Yes.\n"); for(int i = 0;i<N*N+5;i++){ if(flag[i]==1) printf("in\n"); else if(flag[i] ==2) printf("out\n"); } printf("FINISH\n"); } } return 0; }