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