hdu 1022 Train Problem I(栈的应用。。。)

悲剧了好几天这题,我说我栈怎么老写不对捏。。看网上的代码,基本改得和人家的都一样了都,人家用的C++里面的<stack>。。我是自己写的栈而已。。。崩溃得我想我以后不要写栈了,直接<stack>,再调用 多方便。。。后来看了看,判断栈是否为空的时候,函数写错了,我晕。。。

 

这个题给一列火车序号按这个顺序进站,看能不能让火车按另外的顺序出站。开始理解错误,想只能逆序么。。。反正好悲剧,WA了一次。

 

比如这个 123 按 321的话,很好想啊。(样例给得太弱&&自己想得太简单。。)

 

但是有这种情况呀 比如 1234 可以按 2314的顺序出站的。。。

 

可以进1 进2 出2 进3 出3 出1 进4 出4。。。好吧,是我没理解清楚。

 

#include <stdio.h> #include <stdlib.h> #include <string.h> char stack[20]; int k,n; void push(char x) //入栈 { stack[k++] = x; } char pop() //出栈 { k--; return stack[k]; } int sempty() //判断栈是否为空 { if( k==0 ) return 1; return 0; } int main(void) { int flag,i,queue[22],p,j; char ch,in[22],out[22],temp; while(scanf("%d",&n) != EOF) { memset(queue ,-1,sizeof(queue)); //记录动作 1为in 0为out memset(stack ,0,sizeof(stack)); k = 0; p = 0;j = 0;i = 0; scanf("%s",in); //输入这点也有问题。刚开始直接连着写 %s %s,事实证明有问题 scanf("%s",out); while( j<n ) { if( sempty() || stack[k-1]!=out[j] && i<n) { push(in[i]); queue[p++] = 1; i++; } else { if(stack[k-1] == out[j])//判断栈顶元素是否等于第二个序列的数,等于的话出栈 { pop(); j++; queue[p++] = 0; } else break; } } if( sempty() )//如果栈为空,即所有入栈的都找到与之对应的数且出栈 { printf("Yes./n"); for(i=0; i<p; i++) if( queue[i] ) printf("in/n"); else printf("out/n"); printf("FINISH/n"); } else printf("No./nFINISH/n"); } system("pause"); return 0; }

你可能感兴趣的:(hdu 1022 Train Problem I(栈的应用。。。))