タイトル説明
PopPush市は有名な鉄道駅があります。国は、丘のいっぱいです。そして、この駅は、前世紀に建てられました。残念ながら、限られた時間の資金。あなただけの鉄道を構築することができます。また、同じ時間の使用で1つのトラックのみ、それはスペースがないために、鉄道駅へのこのリードは、2本の列車が行き場なくなります。特に、図を参照してください。
ローカルカスタムは、キャビンの再編に何らかの方法で時間、意志のB方向に向けてAから各方向を訓練することです。列車は、到来方向、N(N <= 1000)と区画は、これらの区画1からNに昇順で標識したとします キャビンを再構築する責任リーダーシップは、それがコンパートメント組換えBから引き出すことができ、およびシーケンスの再編成がA1 \ A2 \ A3 ... ANであるかどうか。彼はそれが必要な馬車の順序に従って可能であるかどうかを判断するプログラムを書くのを手伝ってください知っている必要があります。あなたは、彼らがサイトに入る前に、個々の区画は、電車から分離することができると仮定することができます。彼らはBトラックになるまで、彼らは自由に移動することができます。また、いつでも駅は、数多くの車を置くことができると仮定することができます。しかし限り、プラットフォームへのキャリッジとして、それはトラックAに戻ることができない、それはBトラックに向けプラットフォームを放置すれば、それは現場に戻ることはできません。
エントリー
テストケースの複数のセットを入力します。
各試験のために、最初の行は、正の整数N含有する(1 <= N <= 1000)。
各行は、次の番号n個、列車の終了シーケンスの代表者が含まれています。
各試験のシングルエンドの0。
シングルエンド入力として0に。
輸出
試験試料の各セットの行ごとに、出力の終了順序が正当なものです。
試験試料との間に空行によって分離しました。
サンプル入力
5 1 2 3 4 5 5 4 1 2 3 0 6 6 5 4 3 2 1 0 0
サンプル出力
はい なし はい
[アイデア] 1〜Nの番号が順次スタックに格納され、同じ時間内に格納された1〜N、既に格納されている比較と配列要素のトップ要素、スタックから同じ、次いでトップ素子であれば、走査アレイ移動Xの位置へのポインタ、異なる場合、あろう順次スタック番号サイクル全体は、空の場合は、スタックが空であるか否かを判定し、有効で、逆に、無効である1〜N、Nスタック端は入力注出力形式。
#include <iostream>
#include <stack>
using namespace std;
int main() {
int n, m;
while (cin>>n&&n) {
int num[n+1];
while(cin>>num[1]&&num[1]){//一个n可能有多组数据,0作为结束
stack<int> s;
int x=1;
for (int i=2;i<=n;i++)
cin>>num[i];
for (int i=1;i<=n;i++) {
s.push(i);
while (!s.empty()&&s.top()==num[x]) {
x++;
s.pop();
}
}
if (s.size()==0)cout<<"Yes\n";
else cout<<"No\n";
}
cout<<endl;
}
return 0;
}