#include <iostream> #include <vector> std::vector<int> obrazy; long long count = 0, a, b; void shrink(int x, int y, int ob_id) { if (y != 0) { while (obrazy[ob_id] > y) ob_id--; shrink(x, y - ((y / obrazy[ob_id]) * obrazy[ob_id]), ob_id - 1); y = (y / obrazy[ob_id]) * obrazy[ob_id]; while (x != 0) { while (obrazy[ob_id] > x) ob_id--; a = y / obrazy[ob_id], b = x / obrazy[ob_id]; count += a * b; x -= (x / obrazy[ob_id]) * obrazy[ob_id]; } } } int main() { std::ios_base::sync_with_stdio(0); std::cin.tie(0); int x, y, n, q; std::cin >> x >> y >> n; for (int i = 0; i < n; i++) { std::cin >> q; obrazy.push_back(q); } if (x % obrazy[0] != 0 || y % obrazy[0] != 0) std::cout << -1; else { shrink(x, y, obrazy.size() - 1); std::cout << count; } }
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 | #include <iostream> #include <vector> std::vector<int> obrazy; long long count = 0, a, b; void shrink(int x, int y, int ob_id) { if (y != 0) { while (obrazy[ob_id] > y) ob_id--; shrink(x, y - ((y / obrazy[ob_id]) * obrazy[ob_id]), ob_id - 1); y = (y / obrazy[ob_id]) * obrazy[ob_id]; while (x != 0) { while (obrazy[ob_id] > x) ob_id--; a = y / obrazy[ob_id], b = x / obrazy[ob_id]; count += a * b; x -= (x / obrazy[ob_id]) * obrazy[ob_id]; } } } int main() { std::ios_base::sync_with_stdio(0); std::cin.tie(0); int x, y, n, q; std::cin >> x >> y >> n; for (int i = 0; i < n; i++) { std::cin >> q; obrazy.push_back(q); } if (x % obrazy[0] != 0 || y % obrazy[0] != 0) std::cout << -1; else { shrink(x, y, obrazy.size() - 1); std::cout << count; } } |