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