// PA2024 runda 3C - https://sio2.mimuw.edu.pl/c/pa-2024-1/p/obr/
// 15:30-16:30
//-std=c++20
#include<iostream>
#include <cstddef>
#include <algorithm>
#include<vector>
using I = int64_t;
struct Obr {
I h, w; // <1, 9B>
I n; // <1, 30>
std::vector<I> ds; // <1, 9B>
void run() {
input_data();
I result = solve(h, w, n);
std::cout << result;
}
I solve(I x, I y, I ds_it) {
if (x == 0 || y == 0) {
return 0;
}
if (x < y) {
std::swap(x, y);
}
//ds_it -> first bigger picture
while (ds_it > 0 && ds[ds_it - 1] > y) {
ds_it--;
}
if (ds_it == 0) {
return -1;
} else {
I d = ds[ds_it - 1];
if (x % d == 0 && y % d == 0) {
return x / d * y / d;
} else {
I r1 = solve(d, y, ds_it);
I factor = x / d;
I r2 = solve(x % d, y, ds_it);
if (r1 == -1 || r2 == -1) {
return -1;
} else {
return r1 *factor+ r2;
}
}
}
}
void input_data() {
std::cin >> h >> w;
std::cin >> n;
ds.resize(n, 0);
for (I i = 0; i < n; ++i) {
std::cin >> ds[i];
}
}
};
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
Obr obr;
obr.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 | // PA2024 runda 3C - https://sio2.mimuw.edu.pl/c/pa-2024-1/p/obr/ // 15:30-16:30 //-std=c++20 #include<iostream> #include <cstddef> #include <algorithm> #include<vector> using I = int64_t; struct Obr { I h, w; // <1, 9B> I n; // <1, 30> std::vector<I> ds; // <1, 9B> void run() { input_data(); I result = solve(h, w, n); std::cout << result; } I solve(I x, I y, I ds_it) { if (x == 0 || y == 0) { return 0; } if (x < y) { std::swap(x, y); } //ds_it -> first bigger picture while (ds_it > 0 && ds[ds_it - 1] > y) { ds_it--; } if (ds_it == 0) { return -1; } else { I d = ds[ds_it - 1]; if (x % d == 0 && y % d == 0) { return x / d * y / d; } else { I r1 = solve(d, y, ds_it); I factor = x / d; I r2 = solve(x % d, y, ds_it); if (r1 == -1 || r2 == -1) { return -1; } else { return r1 *factor+ r2; } } } } void input_data() { std::cin >> h >> w; std::cin >> n; ds.resize(n, 0); for (I i = 0; i < n; ++i) { std::cin >> ds[i]; } } }; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); Obr obr; obr.run(); } |
English