Official

A - プレゼントが届かない人 / People Who Don't Receive Presents Editorial by MMNMM Editorial for printing


初心者の方へ

この問題は、いくつかの方法で解くことができます。

  • \(i\) 番目の人がいくつプレゼントをもらったかを計算し、\(1\) つ以上プレゼントをもらった人の人数を求める。答えは \(N\) からそれを引いたものとして計算できる。
    • 「いくつプレゼントをもらったか」を求めるプログラムを少し変形することで、「プレゼントをもらったか(例えば、もらったら \(1\) 、そうでなければ \(0\))」のような値を求めることができます。これの総和計算して人数を求めることもできます。
  • プレゼントをもらった人数は、\(T _ i\) から重複を取り除いたときに残る要素の個数と等しいです。重複を取り除く機能が提供されている言語では、それを使うことでプレゼントをもらった人数を求めることができる場合があります。

実装例は以下のようになります。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int N;
    cin >> N;

    // received[i] := 人 i がプレゼントをもらっていたら 1 、そうでなければ 0
    vector<int> received(N);
    for (int i = 0; i < N; ++i) {
        int T;
        cin >> T;
        --T; // 0-indexed にして
        received[T] = 1; // 更新
    }

    // N からもらった人数を引いたものが答え
    cout << N - ranges::count(received, 1) << endl;
    return 0;
}
N = int(input())
# N -(T から重複を除いた要素の個数)が答え
print(N - len(set(map(int, input().split()))))

posted:
last update: