Hướng dẫn giải của SETMAP01: Số lượng phần tử khác nhau
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng dẫn giải
Cho dãy gồm ~n~ số. Cần đếm xem trong dãy có bao nhiêu giá trị khác nhau.
Cách làm
- Dùng một tập hợp (set) để lưu các số đã gặp. Tập hợp chỉ giữ mỗi giá trị đúng một lần, nên số trùng sẽ tự bỏ qua.
- Với mỗi số đọc vào, thêm nó vào tập hợp.
- Cuối cùng, số phần tử của tập hợp chính là số giá trị khác nhau.
- Bẫy: ~n~ có thể tới ~2 \cdot 10^5~, nên không được so sánh từng cặp số vì sẽ quá chậm.
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
// Tập hợp (set) chỉ giữ mỗi giá trị một lần
set<int> tap;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
tap.insert(x);
}
// Số phần tử của tập chính là số phần tử khác nhau
cout << tap.size() << "\n";
return 0;
}
Bình luận