Hướng dẫn giải của [CSES 1621] Distinct Numbers
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.
Một cách để giải bài toán là thêm các số vào một tập hợp (set) và sau đó in kích thước của tập hợp:
#include <iostream>
#include <set>
using namespace std;
int main() {
int n;
cin >> n;
set<int> s;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
s.insert(x);
}
cout << s.size() << "\n";
}
Một cách tiếp cận khác là sắp xếp các số, sau đó các số bằng nhau sẽ nằm cạnh nhau. Hàm unique của C++ sau đó có thể được sử dụng để chọn phần tử đầu tiên của mỗi nhóm các phần tử bằng nhau.
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
sort(v.begin(), v.end());
auto pos = unique(v.begin(), v.end());
cout << pos - v.begin() << "\n";
}
Chương trình tham khảo
#include <iostream>
#include <set>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
set<int> s;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
s.insert(x);
}
cout << s.size() << "\n";
}
Bình luận