#include <iostream>
#include <vector>
#include <map>
std::vector<int> solve(int n, std::vector<int> &v)
{
std::map<int, int> count;
for (int stamp : v)
{
count[stamp]++;
}
std::map<int, int> freq;
for (auto &pair : count)
{
freq[pair.second]++;
}
std::vector<int> ret(n, 0);
int k = 1;
for (; k <= n; ++k)
{
long long distributed = 0;
for (auto &pair : freq)
{
int r = pair.first / k;
if (r > 0)
{
distributed += static_cast<long long>(r) * k * pair.second;
}
}
ret[k - 1] = distributed;
if (distributed == 0)
{
break;
}
}
return ret;
}
int main()
{
int n;
std::cin >> n;
std::vector<int> v(n);
for (int i = 0; i < n; i++)
{
std::cin >> v[i];
}
std::vector<int> res = solve(n, v);
for (int i = 0; i < n; i++)
{
std::cout << res[i] << " ";
}
std::cout << std::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 <vector> #include <map> std::vector<int> solve(int n, std::vector<int> &v) { std::map<int, int> count; for (int stamp : v) { count[stamp]++; } std::map<int, int> freq; for (auto &pair : count) { freq[pair.second]++; } std::vector<int> ret(n, 0); int k = 1; for (; k <= n; ++k) { long long distributed = 0; for (auto &pair : freq) { int r = pair.first / k; if (r > 0) { distributed += static_cast<long long>(r) * k * pair.second; } } ret[k - 1] = distributed; if (distributed == 0) { break; } } return ret; } int main() { int n; std::cin >> n; std::vector<int> v(n); for (int i = 0; i < n; i++) { std::cin >> v[i]; } std::vector<int> res = solve(n, v); for (int i = 0; i < n; i++) { std::cout << res[i] << " "; } std::cout << std::endl; return 0; } |
English