#include <iostream> #include <algorithm> #include <vector> using namespace std; void printVector(const vector <int> &V) { int n= V.size(); for (int i=0; i<n; i++) cout << V[i] << ' '; cout << endl; } int main () { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector <int> input(n); for (int i=0; i<n; i++) cin >> input[i]; sort(input.begin(), input.end()); vector <int> V; int counter= 1; for (int i=1; i<n; i++) { if (input[i-1] == input[i]) counter++; else { V.push_back(counter); counter= 1; } } V.push_back(counter); sort(V.begin(), V.end()); // printVector(V); for (int k=1; k<=n; k++) { int sum= 0; int beg_it= (lower_bound(V.begin(), V.end(), k) - V.begin()); // cout << beg_it << endl; // continue; if (beg_it == (int)V.size()) { // cout << "max = " << k-1 << endl; for (int j=k; j<=n; j++) cout << "0 "; cout << endl; return 0; } for (int i=beg_it; i<(int)V.size(); i++) sum+= (V[i] / k) * k; cout << sum << ' '; } cout << endl; 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 <algorithm> #include <vector> using namespace std; void printVector(const vector <int> &V) { int n= V.size(); for (int i=0; i<n; i++) cout << V[i] << ' '; cout << endl; } int main () { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector <int> input(n); for (int i=0; i<n; i++) cin >> input[i]; sort(input.begin(), input.end()); vector <int> V; int counter= 1; for (int i=1; i<n; i++) { if (input[i-1] == input[i]) counter++; else { V.push_back(counter); counter= 1; } } V.push_back(counter); sort(V.begin(), V.end()); // printVector(V); for (int k=1; k<=n; k++) { int sum= 0; int beg_it= (lower_bound(V.begin(), V.end(), k) - V.begin()); // cout << beg_it << endl; // continue; if (beg_it == (int)V.size()) { // cout << "max = " << k-1 << endl; for (int j=k; j<=n; j++) cout << "0 "; cout << endl; return 0; } for (int i=beg_it; i<(int)V.size(); i++) sum+= (V[i] / k) * k; cout << sum << ' '; } cout << endl; return 0; } |