#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void input(int & n, vector<int> & vec) {
cin >> n;
vec.resize(n,0);
for(int i = 0; i < n; i++) {
cin >> vec[i];
}
}
void count(int const n, vector<int> & vec, vector<int> & cnt) {
sort(vec.begin(), vec.end());
cnt.resize(n, 0);
int cnt_ind = 0;
cnt[0] = 1;
for(int i = 1; i < n; i++) {
if(vec[i] != vec[i-1]) {
cnt_ind++;
}
cnt[cnt_ind]++;
}
sort(cnt.begin(), cnt.end(), greater<int>());
}
void print_result(int const n, vector<int> const & cnt) {
for(int i = 1; i <= n; i++) {
int cur_res = 0;
for(int j = 0; j < n; j++) {
if(cnt[j] < i) {
break;
}
cur_res += cnt[j] - (cnt[j] % i);
}
cout << cur_res << " ";
}
cout << "\n";
}
void solve() {
int n;
vector<int> vec;
input(n, vec);
vector<int> cnt;
count(n, vec, cnt);
print_result(n, cnt);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include <iostream> #include <vector> #include <algorithm> using namespace std; void input(int & n, vector<int> & vec) { cin >> n; vec.resize(n,0); for(int i = 0; i < n; i++) { cin >> vec[i]; } } void count(int const n, vector<int> & vec, vector<int> & cnt) { sort(vec.begin(), vec.end()); cnt.resize(n, 0); int cnt_ind = 0; cnt[0] = 1; for(int i = 1; i < n; i++) { if(vec[i] != vec[i-1]) { cnt_ind++; } cnt[cnt_ind]++; } sort(cnt.begin(), cnt.end(), greater<int>()); } void print_result(int const n, vector<int> const & cnt) { for(int i = 1; i <= n; i++) { int cur_res = 0; for(int j = 0; j < n; j++) { if(cnt[j] < i) { break; } cur_res += cnt[j] - (cnt[j] % i); } cout << cur_res << " "; } cout << "\n"; } void solve() { int n; vector<int> vec; input(n, vec); vector<int> cnt; count(n, vec, cnt); print_result(n, cnt); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; } |
English