Ohne weitere Umschweife, hier ist der Titel
Es gibt einen leeren Stapel c und eine positive ganze Zahl n. 1, 2, 3, ..., n1, 2, 3, ... werden nacheinander in den Stapel geschoben und jederzeit während des Zeitraums herausgesprungen. Fragen Sie dann bei einer gegebenen Pop-Sequenz, ob es sich um eine legale Pop-Sequenz handelt.
Die Eingabevoraussetzungen sind
Die erste Zeile enthält eine Ganzzahl n (1 ≤ n ≤ 100), die die Anzahl der Ganzzahlen angibt, die auf den Stapel verschoben werden müssen.
Die zweite Zeile ist eine Anordnung von [1,n], die eine Pop-Sequenz darstellt, wobei Ganzzahlen durch Leerzeichen getrennt sind.
Die Ausgabe erfordert, dass die Ausgabe „Ja“ für Erfolg und „NEIN“ für Fehler lautet.
Hier sind einige Tipps:
Zunächst ist der Stapel leer, d. h []
. Führen Sie als Nächstes die folgende Sequenz aus, um die Pop-Sequenz zu erhalten 3 2 4 1
:
1.1
In den Stapel schieben, zu diesem Zeitpunkt ist der Stapel [1]
;
2.2
In den Stapel schieben, zu diesem Zeitpunkt ist der Stapel [1,2]
;
3.3
In den Stapel schieben, zu diesem Zeitpunkt ist der Stapel [1,2,3]
;
4.3
Öffnen Sie den Stapel. Zu diesem Zeitpunkt ist der Stapel [1,2]
;
5.2
Öffnen Sie den Stapel. Zu diesem Zeitpunkt ist der Stapel [1]
;
6.4
In den Stapel schieben, zu diesem Zeitpunkt ist der Stapel [1,4]
;
7.4
Öffnen Sie den Stapel. Zu diesem Zeitpunkt ist der Stapel [1]
;
8.1
Öffnen Sie den Stapel, zu diesem Zeitpunkt ist der Stapel []
.
Code wie folgt anzeigen:
#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;
}
Das ist ungefähr die Situation