#include <bits/stdc++.h> using namespace std; const int MAX = 1e5 * 3 + 10; int A[MAX]; vector<int>M; void solve(int n){ sort(A,A+n); int cnt = 1; for (int i = 1; i <= n; i++){ if (i < n && A[i] == A[i-1]){ cnt++; } else { M.push_back(cnt); cnt = 1; } } sort(M.begin(),M.end(),greater<int>()); int m = M.size(), ans = 0; for (int k = 1; k <= n; k++){ for (int i = 0; i < m; i++){ if (k > M[i]){ m = i; break; } ans += (M[i] / k) * k; } cout << ans << " "; ans = 0; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for (int i = 0; i < n; i++){ cin >> A[i]; } solve(n); }
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 | #include <bits/stdc++.h> using namespace std; const int MAX = 1e5 * 3 + 10; int A[MAX]; vector<int>M; void solve(int n){ sort(A,A+n); int cnt = 1; for (int i = 1; i <= n; i++){ if (i < n && A[i] == A[i-1]){ cnt++; } else { M.push_back(cnt); cnt = 1; } } sort(M.begin(),M.end(),greater<int>()); int m = M.size(), ans = 0; for (int k = 1; k <= n; k++){ for (int i = 0; i < m; i++){ if (k > M[i]){ m = i; break; } ans += (M[i] / k) * k; } cout << ans << " "; ans = 0; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for (int i = 0; i < n; i++){ cin >> A[i]; } solve(n); } |