MTFREQ - Đếm tần suất mảng
Xem dạng PDF
Gửi bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, PyPy, Python, Ruby, Rust, Scratch, Swift
Cho mảng ~A~ gồm ~n~ số nguyên không âm: ~a_1, a_2, …, a_n~, hãy đếm số lần xuất hiện của các phần tử khác nhau trong mảng.
Input
- Dòng đầu ghi số nguyên dương ~n~ là số phần tử của mảng;
- Dòng thứ hai ghi ~n~ số ~a_1, a_2, …, a_n~, mỗi số cách nhau bởi một dấu cách.
Giới hạn:
- ~1 ≤ n ≤ 10^6, |a_i|≤ 10^9~.
Output
- Dòng đầu ghi số nguyên dương ~m~ là số phần tử khác nhau trong mảng ~A~;
- ~m~ dòng tiếp theo, mỗi dòng ghi ~2~ số ~u_i, f_i~ trong đó ~u_i~ là giá trị có trong mảng ~A, f_i~ là số lần xuất hiện của ~u_i~ (các số ~u_i~ được sắp xếp theo thứ tự xuất hiện lần đầu trong mảng ~A~).
Sample
Input #1
6
5 3 2 3 2 2
Output #1
3
5 1
3 2
2 3
Hint
Xét #1, có ~3~ giá trị khác nhau là ~5~, ~3~, ~2~ (theo đúng thứ tự xuất hiện). Số ~2~ xuất hiện ~3~ lần, số ~3~ xuất hiện ~2~ lần và số ~5~ xuất hiện ~1~ lần.
Problem source: Chuyên Sơn La Online Judge
Bình luận
hint
ta có thể lưu các phần tử chưa được đánh dấu rồi lưu vào 1 vector
đáp án in ra là phần tử đó và tần xuất phần tử đó
code tham khảo (c++):
include <bits/stdc++.h>
define ll long long
define endl '\n'
define f firts
define s second
define pb push_back
define fio iosbase::syncwith_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
using namespace std; unorderedmap<int,int> mp; vector<int> a; vector<int> tt; int main() { fio; int n; cin >> n; a.reserve(n); for(int i =0; i < n; i++) { int x; cin >> x; a.pb(x); } for(int x : a) { if(mp[x] == 0) tt.pushback(x); mp[x]++; } cout << mp.size() << endl; for(int x : tt) { cout << x << ' '<< mp[x] << endl; } }
FULL AC CHO AE
include <bits/stdc++.h>
using namespace std; int main() { ios::syncwithstdio(false); cin.tie(nullptr);
}
include <bits/stdc++.h>
using namespace std;int main() {ios::syncwithstdio(false);cin.tie(nullptr);int n;cin>>n;vector<int>order;unorderedmap<int,int>freq;unorderedset<int>seen;for(int i=0;i<n;i++){int x;cin>>x;freq[x]++;if(!seen.count(x)){seen.insert(x);order.push_back(x);}}cout<<order.size()<<'\n';for (int x:order){cout<<x<<' '<<freq[x]<<'\n';}return 0;}