#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #define int long long const long long INF = 1e18 + 10; int solve(int w, int h, vector<int> v) { if (w == 0 || h == 0) return 0; if ((w % v[0] + h % v[0]) > 0) { return INF; } while (min(w, h) < v.back()) v.pop_back(); int chosen = v.back(); int res = (w / chosen) * (h / chosen); return res + solve(w % chosen, h - h % chosen, v) + solve(w - w % chosen, h % chosen, v) + solve(w % chosen, h % chosen, v); } void solve(int _id) { int w, h; cin >> w >> h; int n; cin >> n; vector<int> v(n); for (int &i : v) { cin >> i; } if ((w % v[0] + h % v[0]) > 0) { cout << "-1\n"; return; } cout << solve(w, h, v) << "\n"; } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // freopen("../d/1.in","r",stdin); // freopen("../wzo.out","w",stdout); // cin >> t; for (int i = 1; i <= t; i++) { solve(i); } return 0; } /* 1 cc 1 1 1 a ca cca */
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 70 71 72 73 74 75 76 77 78 79 80 | #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #define int long long const long long INF = 1e18 + 10; int solve(int w, int h, vector<int> v) { if (w == 0 || h == 0) return 0; if ((w % v[0] + h % v[0]) > 0) { return INF; } while (min(w, h) < v.back()) v.pop_back(); int chosen = v.back(); int res = (w / chosen) * (h / chosen); return res + solve(w % chosen, h - h % chosen, v) + solve(w - w % chosen, h % chosen, v) + solve(w % chosen, h % chosen, v); } void solve(int _id) { int w, h; cin >> w >> h; int n; cin >> n; vector<int> v(n); for (int &i : v) { cin >> i; } if ((w % v[0] + h % v[0]) > 0) { cout << "-1\n"; return; } cout << solve(w, h, v) << "\n"; } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // freopen("../d/1.in","r",stdin); // freopen("../wzo.out","w",stdout); // cin >> t; for (int i = 1; i <= t; i++) { solve(i); } return 0; } /* 1 cc 1 1 1 a ca cca */ |