#include <bits/stdc++.h> using namespace std; #ifdef DEBUG auto&operator<<(auto &o, pair<auto, auto> p) {o << "(" << p.first << ", " << p.second << ")"; return o;} auto operator<<(auto &o, auto x)->decltype(x.end(), o) {o<<"{"; for(auto e : x) o<<e<<", "; return o<<"}";} #define debug(X) cerr << "["#X"]: " << X << '\n'; #else #define cerr if(0)cout #define debug(X) ; #endif using ll = long long; #define all(v) (v).begin(), (v).end() #define ssize(x) int(x.size()) #define fi first #define se second #define mp make_pair #define eb emplace_back pair<int, int> divv(int a, int b) { return {a/b, a%b}; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int h, w; cin >> h >> w; int n; cin >> n; vector<int> d(n); for(int &x : d) cin >> x; if(h%d[0] != 0 || w%d[0] != 0) {cout << "-1 \n"; return 0;} h /= d[0]; w /= d[0]; int a = h, b = w; ll res = 0; auto fill = [&](int x) { auto [k, r1] = divv(a, x); auto [m, r2] = divv(b, x); res += (ll)m*(h-a)/x + (ll)k*(w-b)/x + (ll)m*k; a = r1; b = r2; }; for(int i = n-1; i >= 0; i--) { d[i] /= d[0]; fill(d[i]); } cout << res << '\n'; 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 | #include <bits/stdc++.h> using namespace std; #ifdef DEBUG auto&operator<<(auto &o, pair<auto, auto> p) {o << "(" << p.first << ", " << p.second << ")"; return o;} auto operator<<(auto &o, auto x)->decltype(x.end(), o) {o<<"{"; for(auto e : x) o<<e<<", "; return o<<"}";} #define debug(X) cerr << "["#X"]: " << X << '\n'; #else #define cerr if(0)cout #define debug(X) ; #endif using ll = long long; #define all(v) (v).begin(), (v).end() #define ssize(x) int(x.size()) #define fi first #define se second #define mp make_pair #define eb emplace_back pair<int, int> divv(int a, int b) { return {a/b, a%b}; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int h, w; cin >> h >> w; int n; cin >> n; vector<int> d(n); for(int &x : d) cin >> x; if(h%d[0] != 0 || w%d[0] != 0) {cout << "-1 \n"; return 0;} h /= d[0]; w /= d[0]; int a = h, b = w; ll res = 0; auto fill = [&](int x) { auto [k, r1] = divv(a, x); auto [m, r2] = divv(b, x); res += (ll)m*(h-a)/x + (ll)k*(w-b)/x + (ll)m*k; a = r1; b = r2; }; for(int i = n-1; i >= 0; i--) { d[i] /= d[0]; fill(d[i]); } cout << res << '\n'; return 0; } |