早速ですが、タイトルはこちらです
空のスタック c と正の整数 n があり、1、2、3、...、n1、2、3、... が順番にスタックにプッシュされ、期間内の任意の時点でポップアウトされます。次に、与えられたポップ シーケンスが正当なポップ シーケンスであるかどうかを尋ねます。
入力要件は、
最初の行には整数 n (1≤n≤100) が含まれており、スタックにプッシュする必要がある整数の数を示します。
2行目はポップシーケンスを表す[1,n]を整数をスペースで区切って並べたものです。
出力では、成功の場合は「yes」、失敗の場合は「NO」が出力される必要があります。
以下にいくつかのヒントを示します。
最初はスタックは空、つまり です[]
。次に、次のシーケンスを実行してポップ シーケンスを取得します3 2 4 1
。
1.1
スタックにプッシュします。この時点でのスタックは[1]
;
2.2
スタックにプッシュします。この時点でのスタックは[1,2]
;
3.3
スタックにプッシュします。この時点でのスタックは[1,2,3]
;
4.3
スタックをポップします。この時点でのスタックは[1,2]
;
5.2
スタックをポップします。この時点でのスタックは[1]
;
6.4
スタックにプッシュします。この時点でのスタックは[1,4]
;
7.4
スタックをポップします。この時点でのスタックは[1]
;
8.1
スタックをポップします。このときのスタックは です[]
。
コードは以下のように表示されます。
#include <iostream>
#include <stack>
using namespace std;
int main() {
int n;
cin >> n;
stack<int> s;
int cur = 1;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
while (s.empty() || s.top() != x) {
if (cur > n) {
cout << "No" << endl;
return 0;
}
s.push(cur++);
}
s.pop();
}
if (s.empty()) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
大体こんな状況です