AIZU ONLINE JUDGE

AOJ ITP2 7_B(Set: Delete)を解く

AOJ_ITP2_7_B

Aizu Online Judge(AOJ)が提供している「プログラミング応用」(ITP2)の7_B問題をC++で解いてみました。

ITP2では、「プログラミングのための基礎ライブラリを獲得します」とあります。トピック#7では、集合(set コンテナ)を学びます。

問題(7_B: Set: Delete)

問題はリンク先をご覧ください。

AOJ ITP2 7_B問題: Set: Delete

Set コンテナについて学びます。

Set コンテナについて

以下は、cpprefjp 様の記事を参考にさせていただきました。

Set コンテナについての概要と主なメソッドは、7_A で紹介しています。

C++ プログラム例(ITP2 7_B)

問題で与えられるクエリに従い、整数の集合 S に対して、以下の操作を行います。7_A と比較して、クエリ2が追加されています。

  • クエリ0 insert により、与えられた x をコンテナ S に挿入する。
  • クエリ1 コンテナ S に含まれる x の数を出力する(問題の制約より 0 か 1となります)。
  • クエリ2 コンテナ S から x を削除する。

Set コンテナで提供されているメソッドを、クエリに従い呼び出します。削除するために erase メソッドを呼び出します。差分となるコードの背景色を変更しています。以下が、C++プログラムとなります。

#include <iostream>
#include <set>

using namespace std;

int main()
{
	set<int> S;

	int q;
	cin >> q;

	for (int i = 0; i < q; ++i) {
		int command;
		cin >> command;
		if (command == 0) {
			int x;
			cin >> x;
			S.insert(x);
			cout << S.size() << endl;
		} else if (command == 1) {
			int x;
			cin >> x;
			cout << S.count(x) << endl;
		} else if (command == 2) {
			int x;
			cin >> x;
			S.erase(x);
		}
	}

	return 0;
}

上記プログラムは、AOJ で「AC(Accepted=正解)」と判定されました。

最後に

Set は、insert だけではなく、erase も対数時間で効率よく処理できます。

引き続き、ITP2 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA