配点: 200 点 / 実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 37
問題概要
整数 の書かれたカードが
枚積み重なったカードの山がある。
個のクエリを処理せよ。それぞれのクエリは以下のいずれかの形式である。
1 x
: 整数の書かれたカードを
枚カードの山の一番上に積み重ねる。
2
: カードの山の一番上のカードを取り除き、取り除いたカードに書かれている整数を出力する。
制約
- 2番目のクエリが1つ以上存在する。
- 入力される値は全て整数。
考察
本問のような、データを上に積み重ねるようにして管理したいときに有効なデータ構造として、stack
というものがある。
今回は、クエリ1がpush
、クエリ2がpop
という操作にそれぞれ対応している。
最初に 0
を100回push
しておくことを忘れずに。
実装例
#include <bits/stdc++.h> using namespace std; #define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++) // ======================================== // int main() { int Q; cin >> Q; stack<int> st; rep(i, 0, 100) st.push(0); while (Q--) { int t; cin >> t; if (t == 1) { int x; cin >> x; st.push(x); } else if (t == 2) { cout << st.top() << endl; st.pop(); } } return 0; }
実装時間: 5分
コメント
stack
の練習問題みたいな感じ。