// PA2024 runda 2A - https://sio2.mimuw.edu.pl/c/pa-2024-1/p/zna/
//-std=c++20
#include<iostream>
#include <cstddef>
#include<map>
#include <algorithm>
#include<vector>
using I = u_int64_t;
struct Zna {
I n; // stamps <=300K
std::map<I, I> city_counts;
std::vector<I> counts;
I sum = 0;
void run() {
std::cin >> n;
for (int i = 0; i < n; ++i) {
next_stamp();
}
counts.resize(n, 0);
I i = 0;
for (const auto &pair: city_counts) {
counts[i++] = pair.second;
sum += pair.second;
}
std::sort(counts.begin(), counts.end());
// one buyer
std::cout << sum;
I smallest_city = 0; // counter for counts
for (I buyers = 2; buyers <= n; buyers++) {
//find count at least buyers
while (smallest_city < counts.size() && counts[smallest_city] < buyers) {
sum -= counts[smallest_city];
smallest_city++;
}
I reminders = 0;
for (I z = smallest_city; z < counts.size(); z++) {
reminders += counts[z] % buyers;
}
std::cout << " " << (sum - reminders);
}
}
void next_stamp() {
I a;
std::cin >> a;
if (city_counts.contains(a)) {
city_counts[a]++;
} else {
city_counts[a] = 1;
}
}
};
//16:20 - 16:50, 17:20-17:25
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
Zna zna;
zna.run();
}
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 62 63 64 65 66 67 68 69 70 71 | // PA2024 runda 2A - https://sio2.mimuw.edu.pl/c/pa-2024-1/p/zna/ //-std=c++20 #include<iostream> #include <cstddef> #include<map> #include <algorithm> #include<vector> using I = u_int64_t; struct Zna { I n; // stamps <=300K std::map<I, I> city_counts; std::vector<I> counts; I sum = 0; void run() { std::cin >> n; for (int i = 0; i < n; ++i) { next_stamp(); } counts.resize(n, 0); I i = 0; for (const auto &pair: city_counts) { counts[i++] = pair.second; sum += pair.second; } std::sort(counts.begin(), counts.end()); // one buyer std::cout << sum; I smallest_city = 0; // counter for counts for (I buyers = 2; buyers <= n; buyers++) { //find count at least buyers while (smallest_city < counts.size() && counts[smallest_city] < buyers) { sum -= counts[smallest_city]; smallest_city++; } I reminders = 0; for (I z = smallest_city; z < counts.size(); z++) { reminders += counts[z] % buyers; } std::cout << " " << (sum - reminders); } } void next_stamp() { I a; std::cin >> a; if (city_counts.contains(a)) { city_counts[a]++; } else { city_counts[a] = 1; } } }; //16:20 - 16:50, 17:20-17:25 int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); Zna zna; zna.run(); } |
English