Hướng dẫn giải của SETMAP02: Số lần xuất hiện các phần tử
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 in ra từng giá trị khác nhau cùng số lần xuất hiện của nó, theo thứ tự giá trị tăng dần.
Cách làm
- Dùng bản đồ (map) với khóa là giá trị của số và giá trị là số lần xuất hiện.
- Với mỗi số ~x~ đọc vào, tăng ~dem[x]~ thêm 1.
- Map luôn sắp xếp khóa từ nhỏ đến lớn, nên duyệt map từ đầu đến cuối sẽ in đúng thứ tự yêu cầu.
- Mỗi dòng in gồm giá trị và số lần xuất hiện, cách nhau bởi một khoảng trắng.
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
// Bản đồ (map): khóa là giá trị, giá trị là số lần xuất hiện
map<int, int> dem;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
dem[x]++;
}
// map tự sắp xếp khóa tăng dần nên in ra đúng thứ tự yêu cầu
for (map<int, int>::iterator it = dem.begin(); it != dem.end(); it++) {
cout << it->first << " " << it->second << "\n";
}
return 0;
}
Bình luận