#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; } |