けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 085 B - Kagami Mochi (6Q, 灰色, 200 点)

古き良き、ABS にも収録した問題!

問題概要

 N 個の整数  d_{1}, d_{2}, \dots, d_{N} が与えられる。

これらの整数の中に、相異なる整数は何種類あるかを求めよ。

制約

  •  1 \le N \le 100
  •  1 \le d_{i} \le 100

解法

最も簡単な方法は、集合型 set 型を用いる方法だと思われる。set

  • 要素の挿入 (集合に要素  v を挿入する)
  • 要素の削除 (集合から要素  v を削除する)
  • 要素の検索 (集合に要素  v が含まれるかを判定する)

といった処理を高速に実行できるものだ。C++ の場合、それぞれ insert()erase()count() で実行できる。

詳しくは次の記事にも書いています。

qiita.com

コード

#include <iostream>
#include <set>
using namespace std;

int main() {
    int N;
    int d[110];
    cin >> N;
    for (int i = 0; i < N; ++i) cin >> d[i];

    set<int> values; // insert するときに重複を取り除いてくれます
    for (int i = 0; i < N; ++i) {
        values.insert(d[i]); // 挿入します
    }

    // set のサイズを出力します
    cout << values.size() << endl;
}