// PA2025 runda 3B - https://sio2.mimuw.edu.pl/c/pa-2025-1/p/mno/ //-std=c++20 #include<iostream> #include<vector> #include<algorithm> #include<numeric> using namespace std; u_int64_t multiply_digits(u_int64_t x) { u_int64_t r = 1; while (x != 0) { u_int64_t u = x % 10; r *= u; x /= 10; if (r == 0) { break; } } return r; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); u_int16_t t; cin >> t; vector<u_int64_t> ns; ns.resize(t); for (auto &n: ns) { cin >> n; } vector<u_int64_t> orders; orders.resize(t); iota(orders.begin(), orders.end(), 0); sort(orders.begin(), orders.end(), [&ns](u_int64_t i1, u_int64_t i2) { return ns[i1] < ns[i2]; }); vector<vector<u_int64_t>> counts; counts.resize(t); u_int64_t j = 0; while (j < ns[orders[0]]) { counts[orders[0]].resize(10); j++; u_int64_t r = j; while (r > 9) { r = multiply_digits(r); }; counts[orders[0]][r]++; } for (int i = 1; i < t; i++) { auto oi = orders[i]; counts[oi] = counts[orders[i - 1]]; while (j < ns[oi]) { j++; u_int64_t r = j; while (r > 9) { r = multiply_digits(r); } counts[oi][r]++; } } for (const auto &c: counts) { for (int i = 0; i < 10; i++) { cout << c[i] << " "; } 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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | // PA2025 runda 3B - https://sio2.mimuw.edu.pl/c/pa-2025-1/p/mno/ //-std=c++20 #include<iostream> #include<vector> #include<algorithm> #include<numeric> using namespace std; u_int64_t multiply_digits(u_int64_t x) { u_int64_t r = 1; while (x != 0) { u_int64_t u = x % 10; r *= u; x /= 10; if (r == 0) { break; } } return r; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); u_int16_t t; cin >> t; vector<u_int64_t> ns; ns.resize(t); for (auto &n: ns) { cin >> n; } vector<u_int64_t> orders; orders.resize(t); iota(orders.begin(), orders.end(), 0); sort(orders.begin(), orders.end(), [&ns](u_int64_t i1, u_int64_t i2) { return ns[i1] < ns[i2]; }); vector<vector<u_int64_t>> counts; counts.resize(t); u_int64_t j = 0; while (j < ns[orders[0]]) { counts[orders[0]].resize(10); j++; u_int64_t r = j; while (r > 9) { r = multiply_digits(r); }; counts[orders[0]][r]++; } for (int i = 1; i < t; i++) { auto oi = orders[i]; counts[oi] = counts[orders[i - 1]]; while (j < ns[oi]) { j++; u_int64_t r = j; while (r > 9) { r = multiply_digits(r); } counts[oi][r]++; } } for (const auto &c: counts) { for (int i = 0; i < 10; i++) { cout << c[i] << " "; } cout << '\n'; } } |