hdu 1022 - 数据结构 栈
按序列a进栈,问能不能按序列b出栈。
遍历b,如果当前元素进过栈了,那么必须和栈顶元素相同。如果没进过栈则按a序列压栈,直到遇到当前元素。
#include <iostream> #include <stack> #include <string.h> using namespace std; char ino[22],outo[22]; bool visited[22]; char result[222]; int n; int main(){ int i,j; stack<char > s; while(scanf("%d%s%s",&n,ino,outo)!=EOF){ result[0] = '\0'; while(!s.empty()) s.pop(); memset(visited,false,sizeof(visited)); for(i=0,j=0;i<n;i++){ if(!visited[outo[i]-'0']){ for(;j<n;j++){ visited[ino[j]-'0'] = true; strcat(result,"in\n"); if(ino[j]==outo[i]) { strcat(result,"out\n"); j++; break; } s.push(ino[j]); } } else{ if(s.top()==outo[i]){ s.pop(); strcat(result,"out\n"); } } } if(s.empty()) printf("Yes.\n%sFINISH\n",result); else puts("No.\nFINISH"); } return 0; }