POJ 1363 Rails(模拟/数据结构)

//模拟/数据结构——栈堆(stack) #include<iostream> #include<stack> using namespace std; const int MAXN = 1000 + 10; int n,target[MAXN],temp; int main() { while(cin >> n) { if(n == 0)break; while(1) { stack<int> s;//申请STL栈堆 int A = 1,B = 1;//A是有顺序的车厢号,B是栈堆指针 cin >> temp; if(temp != 0) { target[1] = temp; for(int i = 2;i <= n;++i) { cin >> target[i];//目标数组 } if(target[1] == 0)break; int ok = 1; while(B <= n) { if(A == target[B])//如果第一节车厢就与目标相同,满足条件 { A++; B++; } else if(!s.empty() && s.top() == target[B])//如果栈堆非空且栈顶与目标相同,满足条件 { s.pop();//将栈顶元素丢弃 B++;//指针++ } else if(A <= n)//如果上述两条件均不满足但车厢号仍然小于N,则将其放入栈堆中 s.push(A++); else //上述条件无一成立,则不可能满足目标数组 { ok = 0; break; } } if(ok)cout << "Yes" <<endl; else cout << "No" <<endl; } else { cout << endl;//注意每个不同数量车厢的测试案例的输出中间有一个空行 break; } } } return 0; } 

你可能感兴趣的:(POJ 1363 Rails(模拟/数据结构))