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

 

posted @ 2017-05-02 18:33  redips  阅读(125)  评论(0编辑  收藏  举报