実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 180
問題概要
空の袋に対して 個のクエリが与えられるので順に処理せよ。なお、クエリには次の3種類がある。
- クエリ :
1 x
: 整数が書かれたボールを1個袋に入れる。
2 x
: 整数が書かれたボールを1個袋から取り出す。ただし、このクエリが与えられるとき、袋の中に整数
が書かれたボールが存在することが保証される。
3
: 袋の中のボールの種類数を出力する。
制約
- 入力はすべて整数。
考察
クエリの形式から、ボールの種類とそれに対応する個数を記録していけばよいことが分かる。このようなときは前者をkey
、後者をvalue
とした連想配列 (C++ ではmap
やunordered_map
) を用いると便利である。
クエリ2についてはvalue
が0になったkey
を削除しないと、クエリ3で出力する連想配列のサイズが変わってしまうので注意しよう。
コード
#include <bits/stdc++.h> using namespace std; // ======================================== // int main() { int Q; cin >> Q; unordered_map<int, int> mp; while (Q--) { int t, x; cin >> t; if (t == 1) { cin >> x; mp[x]++; } else if (t == 2) { cin >> x; mp[x]--; if (mp[x] == 0) mp.erase(x); } else if (t == 3) { cout << mp.size() << endl; } } }
実装時間: 20分