バケットや集計処理の基本問題!
問題概要
を 2 個ずつ集めてできる
個の整数から、1 個の整数を除外した。
そうした 個の整数を並べてできる数列
が与えられる。
最初に除外した整数の値を答えよ。
制約
解法
このくらいの難易度の問題から、次のようなスキルが必要になってくる。
数列 に対して、次のように定義される配列を考える。
con[v]← 数列の中に、整数値
が何個あるか
たとえば、 のとき、求める配列は次のようになる。
con[1]= 2con[2]= 1con[3]= 2con[4]= 2
このような集計処理は、次のように実装できる。ここで、今回は数列 に含まれる値の最大値が
なので、配列
con のサイズを としている。
vector<int> con(N + 1, 0); for (int i = 0; i < N * 2 - 1; ++i) { ++con[A[i]]; }
このような配列 con を求めたあとは、con[1], con[2], ..., con[N] のうち、2 ではなく 1 であるものがあるので、それを答えればよい。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; vector<int> con(N + 1, 0); for (int i = 0; i < N * 2 - 1; ++i) { int A; cin >> A; ++con[A]; } int res; for (int i = 1; i <= N; ++i) { if (con[i] == 1) { res = i; } } cout << res << endl; }