#include <iostream>
#include <set>
#include <vector>
#include <cstdint>
namespace {
using std::ios_base, std::cin;
using std::cout, std::multiset, std::vector;
using msize_t = uint32_t;
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// Czytanie i przygotowywanie danych
msize_t n, x;
cin >> n;
multiset<msize_t> elts;
for (msize_t i = 0; i < n; ++i) {
cin >> x;
elts.insert(x);
}
vector<msize_t> cnts(1, 0);
msize_t i_cnts = 0;
auto it_elts = elts.begin();
auto it_next = it_elts;
for (msize_t i = 0; i < n; ++i) {
++cnts[i_cnts];
it_next = it_elts;
++it_next;
if (i + 1 < n && *it_elts != *it_next) {
++i_cnts;
cnts.push_back(0);
}
elts.erase(it_elts);
it_elts = it_next;
}
// Obliczanie wyniku
bool zero_sum = false;
msize_t sum;
for (msize_t k = 1; k <= n; ++k) {
sum = 0;
for (msize_t j = 0; !zero_sum && j < cnts.size(); ++j)
sum += cnts[j] / k;
if (sum == 0)
zero_sum = true;
cout << k * sum << ' ';
}
cout << '\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 44 45 46 47 48 49 50 51 52 | #include <iostream> #include <set> #include <vector> #include <cstdint> namespace { using std::ios_base, std::cin; using std::cout, std::multiset, std::vector; using msize_t = uint32_t; }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); // Czytanie i przygotowywanie danych msize_t n, x; cin >> n; multiset<msize_t> elts; for (msize_t i = 0; i < n; ++i) { cin >> x; elts.insert(x); } vector<msize_t> cnts(1, 0); msize_t i_cnts = 0; auto it_elts = elts.begin(); auto it_next = it_elts; for (msize_t i = 0; i < n; ++i) { ++cnts[i_cnts]; it_next = it_elts; ++it_next; if (i + 1 < n && *it_elts != *it_next) { ++i_cnts; cnts.push_back(0); } elts.erase(it_elts); it_elts = it_next; } // Obliczanie wyniku bool zero_sum = false; msize_t sum; for (msize_t k = 1; k <= n; ++k) { sum = 0; for (msize_t j = 0; !zero_sum && j < cnts.size(); ++j) sum += cnts[j] / k; if (sum == 0) zero_sum = true; cout << k * sum << ' '; } cout << '\n'; } |
English