poj1363 栈入门题·

题目链接:http://poj.org/problem?id=1363

思路:使用一个栈(in) 用来存储已经进入车站的火车

依次读取火车出栈顺序的序列  如果与栈的顶部元素相同 弹出栈顶部元素 读取下一个出栈顺序

  如果不同  下一辆火车进栈   如果火车全部进栈而出栈顺序序列未读完 说明不能按顺序出栈  则补满 读取出栈顺序的序列

如果出栈顺序序列读完 跳出循环  若栈为空 则yes ; else,no;

注意输出 空行

//memory 708k time 79ms

#include <cstdio>
#include <algorithm>
#include <stack>
#include <iostream>

using namespace std;

int main(){
    int t;
    while(scanf("%d",&t),t){
        if(t==0) break;
        while(true){
            stack<int> in; //声明为成员变量 不用初始清空
            int index=1;
            in.push(index);
            int i=1;
            int temp;
            scanf("%d",&temp);
            if(temp==0) break;
            while(true){                
                if(!in.empty()&&in.top()==temp){
                      in.pop();
                      i++;
                      if(i>t) break; 
                      scanf("%d",&temp);
                          
                }else{
                    index++;
                    if(index>t){
                      while(true){  //此处为当进栈的火车已满而 读取出栈顺序次数未到时  
                         i++;       //补满 出栈顺序次数               
                         if(i>t) break;                          
                         scanf("%d",&temp);
                      }          
                    }
                    if(i>t) break;
                    in.push(index);                  
                 }                                              
            }
            if(in.empty()) printf("Yes\n");
            else printf("No\n");
        }  
        printf("\n");  //空行 
    }    
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值