HDU 1022 (STL_D题)解题报告

题目链接: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;

}
View Code

 

posted @ 2018-01-20 22:45  caomp  阅读(116)  评论(0)    收藏  举报