Official
A - プレゼントが届かない人 / People Who Don't Receive Presents Editorial
by
A - プレゼントが届かない人 / People Who Don't Receive Presents Editorial
by
MMNMM
初心者の方へ
- AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
- また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
この問題は、いくつかの方法で解くことができます。
- \(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()))))
