#include "bits/stdc++.h" using namespace std; template<typename _T> void _debug(const char *s, _T x){ cerr << s << " = " << x << "\n";} template<typename _T, typename... R> void _debug(const char *s, _T x, R... r){ while(*s != ',') cerr << *s++; cerr << " = " << x << ", "; _debug(s + 1, r...);} #define debug(...) _debug(#__VA_ARGS__, __VA_ARGS__) #define sz(s) int32_t(s.size()) #define all(x) begin(x), end(x) #define getuniqe(x) x.erase(unique(all(x)), end(x)) #define X first #define Y second using ll = long long; using ld = long double; #define int ll int n; vector<int> d; int solve(int w, int h) { int res = 0; while (h * w != 0) { int cnt_h = h, cnt_w = w; for (int i = n - 1; i >= 0; i--) { int ile_h = cnt_h / d[i]; int ile_w = cnt_w / d[i]; if (ile_h == 0 || ile_w == 0) continue; // debug(cnt_w, cnt_h, ile_w, ile_h, i, d[i]); cnt_h = min(cnt_h, ile_h * d[i]); cnt_w -= ile_w * d[i]; res += ile_h * ile_w; } h -= cnt_h; } return res; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int h, w; cin >> h >> w >> n; d.resize(n); for (int i = 0; i < n; i++) { cin >> d[i]; } if (__gcd(h, w) % d[0]) { cout << "-1\n"; return 0; } cout << min(solve(w, h), solve(h, w)) << "\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 | #include "bits/stdc++.h" using namespace std; template<typename _T> void _debug(const char *s, _T x){ cerr << s << " = " << x << "\n";} template<typename _T, typename... R> void _debug(const char *s, _T x, R... r){ while(*s != ',') cerr << *s++; cerr << " = " << x << ", "; _debug(s + 1, r...);} #define debug(...) _debug(#__VA_ARGS__, __VA_ARGS__) #define sz(s) int32_t(s.size()) #define all(x) begin(x), end(x) #define getuniqe(x) x.erase(unique(all(x)), end(x)) #define X first #define Y second using ll = long long; using ld = long double; #define int ll int n; vector<int> d; int solve(int w, int h) { int res = 0; while (h * w != 0) { int cnt_h = h, cnt_w = w; for (int i = n - 1; i >= 0; i--) { int ile_h = cnt_h / d[i]; int ile_w = cnt_w / d[i]; if (ile_h == 0 || ile_w == 0) continue; // debug(cnt_w, cnt_h, ile_w, ile_h, i, d[i]); cnt_h = min(cnt_h, ile_h * d[i]); cnt_w -= ile_w * d[i]; res += ile_h * ile_w; } h -= cnt_h; } return res; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int h, w; cin >> h >> w >> n; d.resize(n); for (int i = 0; i < n; i++) { cin >> d[i]; } if (__gcd(h, w) % d[0]) { cout << "-1\n"; return 0; } cout << min(solve(w, h), solve(h, w)) << "\n"; } |