効率的な発現を行うためにいくつかのコードのようにインスピレーション。
提出された(件名)リンク→ UVA-514
これが問題の本質である:「描画順序」与えられ、それは与えられたシーケンススタックかどうかが決定されます。
このような小さな問題:
だから、考え方は同じです:
アイデア:
ヘッド=スタック・アレイ、次のいずれかの配列移動すると、上部要素をポップ場合、配列ストアは、スケジューリング順序、スタック記憶スタック通常の順序を訓練
スタックが空の場合トラバーサルが完了した後はい出力は、全スケジュールが完了し、
注意点:
1、出力がYESはいではありません!(トイレハロで泣いて、間違って以降)
2、結果の各セットの間に空行は、最終的な結果の後にブランク行を省略することができません。
図3は、この質問への入力は限りラインは、次のn 0を表示されないように、あなたは常にそれを入力することができ、Nを入力し、心のうちです。あなたが試すことができるようにボトムアッププログラミング方法:あなたの主要なアイデアを書き、最後に補足入力フォーマット。
コード:
#include<bits/stdc++.h>
using namespace std;
int main() {
int a[1010];
int n; while((cin >> n) && n) {
while(cin >> a[1] && a[1]) {
for(int i = 2; i <= n; i++) { cin >> a[i]; }
stack<int> s2;
int j = 1;
for(int i = 1; i <= n; i++) {
s2.push(i);
while((!s2.empty()) && (s2.top() == a[j])) { j++; s2.pop(); }
}
cout << ((s2.empty()&&(j==n+1)) ? "Yes\n" : "No\n");
}
cout << "\n";
}
return 0;
}
収穫:
図1に示すように、ボトムアッププログラミング方法。
2、習熟度を向上させるために、スタックの使用。