码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1022 (STL_D题)解题报告

时间:2018-01-21 00:09:21      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:stack   play   splay   count   pop   color   lag   std   mes   

题目链接: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题)解题报告

标签:stack   play   splay   count   pop   color   lag   std   mes   

原文地址:https://www.cnblogs.com/caomingpei/p/8322239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!