#include <cstdio>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n;
map<long long, long long> znaczki;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
long long city;
scanf("%lld", &city);
if (znaczki.contains(city)) {
znaczki[city]++;
}
else {
znaczki[city] = 1;
}
}
vector<long long> counts;
for (auto it = znaczki.begin(); it != znaczki.end(); ++it) {
counts.push_back(it->second);
// printf("%d %d\n", it->first, it->second);
}
sort(counts.begin(), counts.end(), greater<>());
for (long long i = 1; i <= n; i++) {
unsigned long long result = 0;
for (long long j = 0; j < counts.size() && counts[j] >= i; j++) {
result += counts[j] / i * i;
}
printf("%llu ", result);
}
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 | #include <cstdio> #include <map> #include <algorithm> #include <vector> using namespace std; int main() { int n; map<long long, long long> znaczki; scanf("%d", &n); for (int i = 0; i < n; i++) { long long city; scanf("%lld", &city); if (znaczki.contains(city)) { znaczki[city]++; } else { znaczki[city] = 1; } } vector<long long> counts; for (auto it = znaczki.begin(); it != znaczki.end(); ++it) { counts.push_back(it->second); // printf("%d %d\n", it->first, it->second); } sort(counts.begin(), counts.end(), greater<>()); for (long long i = 1; i <= n; i++) { unsigned long long result = 0; for (long long j = 0; j < counts.size() && counts[j] >= i; j++) { result += counts[j] / i * i; } printf("%llu ", result); } return 0; } |
English