/* * Copyright (c) leo * All rights reserved. * filename: f0606.cpp * summary : 利用栈判断车厢顺序安排的可行性 * version : 1.0 * author : leo * date : 6.06.2011 */ //============================================= #include <iostream> #include <fstream> #include <sstream> #include <stack> using namespace std; //-------------------------------------------- void carriageOrder() { ifstream in("rail.txt"); for(int n,line=0; in>>n && n && in.ignore();) //in.ignore()滤去文件在读取整数后的回车 { cout<<(line++ ? "/n" : ""); //第一次不输出回车,以后每次输出一个回车以区分各组 for(string s; getline(in,s) && s!="0";) //s="0",本组结束 { istringstream sin(s); stack<int> st; for(int last=0,coach; sin>>coach;st.pop()) { for(int p=last+1; p<=coach; ++p) st.push(p);//小于coach的各车厢进栈 if(last<coach) last = coach; //当前coach比以往都大,last标记为最大车厢号 if(st.top()!=coach) break; } cout<<(!sin ? "yes/n" : "no/n"); //此行全部匹配完,可顺利进栈出栈,则yes } } } //-------------------------------------------- int main() { carriageOrder(); return 0; } //=============================================