#if defined(EMBE_DEBUG) && !defined(NDEBUG) #include "embe-debug.hpp" #else #define LOG_INDENT(...) do {} while (false) #define LOG(...) do {} while (false) #define DUMP(...) do {} while (false) #endif #include <algorithm> #include <iostream> #include <utility> #include <vector> using namespace std; namespace { long long solve(int h, int w, vector<int> sizes) { int n = sizes.size(); sizes.push_back(1'000'111'222); long long res = 0; for (int i = 0; i < n; ++i) { int cur = sizes[i]; int next = sizes[i + 1]; int dh = h % next; int dw = w % next; if (dh % cur != 0 || dw % cur != 0) return -1; h -= dh; res += static_cast<long long>(dh / cur) * (w / cur); w -= dw; res += static_cast<long long>(dw / cur) * (h / cur); } return res; } } int main() { iostream::sync_with_stdio(false); cin.tie(nullptr); int h, w; cin >> h >> w; int n; cin >> n; vector<int> sizes(n); for (auto& s: sizes) { cin >> s; } cout << solve(h, w, move(sizes)) << endl; return 0; }
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 | #if defined(EMBE_DEBUG) && !defined(NDEBUG) #include "embe-debug.hpp" #else #define LOG_INDENT(...) do {} while (false) #define LOG(...) do {} while (false) #define DUMP(...) do {} while (false) #endif #include <algorithm> #include <iostream> #include <utility> #include <vector> using namespace std; namespace { long long solve(int h, int w, vector<int> sizes) { int n = sizes.size(); sizes.push_back(1'000'111'222); long long res = 0; for (int i = 0; i < n; ++i) { int cur = sizes[i]; int next = sizes[i + 1]; int dh = h % next; int dw = w % next; if (dh % cur != 0 || dw % cur != 0) return -1; h -= dh; res += static_cast<long long>(dh / cur) * (w / cur); w -= dw; res += static_cast<long long>(dw / cur) * (h / cur); } return res; } } int main() { iostream::sync_with_stdio(false); cin.tie(nullptr); int h, w; cin >> h >> w; int n; cin >> n; vector<int> sizes(n); for (auto& s: sizes) { cin >> s; } cout << solve(h, w, move(sizes)) << endl; return 0; } |