HDU 1022 (STL_D题)解题报告

Posted caomingpei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于HDU 1022 (STL_D题)解题报告的主要内容,如果未能解决你的问题,请参考以下文章

HDU 2199 (二分&三分 _A题)解题报告

HDU 2013(递推&递归_D题)解题报告

HDU 1312(DFS_C题)解题报告

HDU 1455(DFS_F题)解题报告

HDU 2141(二分&三分 _B题)解题报告

HDU 2044(递推&递归_A题)解题报告