Yuulis.log

Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】ABC 396 B - Card Pile | 緑コーダーが解くAtCoder

atcoder.jp

配点: 200 点 / 実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 37

問題概要

整数  0 の書かれたカードが  100 枚積み重なったカードの山がある。  Q 個のクエリを処理せよ。それぞれのクエリは以下のいずれかの形式である。

  • 1 x : 整数  x の書かれたカードを  1 枚カードの山の一番上に積み重ねる。
  • 2 : カードの山の一番上のカードを取り除き、取り除いたカードに書かれている整数を出力する。

制約

  •  1\le Q\le 100
  •  1\le x\le 100
  • 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;
}

atcoder.jp

実装時間: 5分

コメント

stackの練習問題みたいな感じ。