Official
C - Compression Editorial
by
C - Compression Editorial
by
sounansya
この問題は set と呼ばれるデータ構造を使うことで解くことができます。
set はいくつかの要素の集合を保持するデータ構造です。特徴として、配列は要素の順番を保持しますが set は数学の集合と同じように順番や各要素の個数を区別しません。
この問題は \(A\) の要素を全て set に代入し、set の中に残った要素を小さい順に並べることで正答することができます。
n = int(input())
a = list(map(int, input().split()))
s = set(a)
ans = list(s)
ans.sort()
print(len(ans))
print(*ans)
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int &i : a)
cin >> i;
set<int> s(a.begin(), a.end());
vector<int> ans(s.begin(), s.end());
sort(ans.begin(), ans.end());
cout << ans.size() << endl;
for (int i = 0; i < ans.size(); i++)
cout << ans[i] << " \n"[i + 1 == ans.size()];
}
また、 C++ には std::unique
という関数が存在し、この関数を使うと楽に実装することができます。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int &i : a)
cin >> i;
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
cout << a.size() << endl;
for (int i = 0; i < a.size(); i++)
cout << a[i] << " \n"[i + 1 == a.size()];
}
posted:
last update: