// #include <bits/stdc++.h> #define FAST ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); #include <iostream> #include <vector> #include <queue> using namespace std; int main() { FAST uint64_t n,m, dn; cin >> n >> m >> dn; vector<uint64_t> d(dn); for (int i = 0; i < dn; i++) { cin >> d[i]; } if (n%d[0] != 0 || m %d[0] != 0 ) { cout << -1; return 0; } uint64_t fit_n, fit_m; pair<uint64_t, uint64_t> curr; queue<pair<uint64_t,uint64_t>> to_split; queue<pair<uint64_t,uint64_t>> next_iteration; to_split.push({n,m}); uint64_t total =0; for (int i = dn-1; i>=0; i--) { while (to_split.size()>0){ curr = to_split.front(); to_split.pop(); fit_n = curr.first/d[i]; fit_m = curr.second/d[i]; total += fit_m*fit_n; // TODO: check XD if (fit_n * d[i] < curr.first) { next_iteration.push({ curr.first-fit_n * d[i], curr.second, }); } if (fit_m *d[i] < curr.second) { next_iteration.push({ fit_n * d[i], curr.second-fit_m * d[i], }); } } to_split = next_iteration; next_iteration = queue<pair<uint64_t,uint64_t>>(); } cout << total; }
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 | // #include <bits/stdc++.h> #define FAST ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); #include <iostream> #include <vector> #include <queue> using namespace std; int main() { FAST uint64_t n,m, dn; cin >> n >> m >> dn; vector<uint64_t> d(dn); for (int i = 0; i < dn; i++) { cin >> d[i]; } if (n%d[0] != 0 || m %d[0] != 0 ) { cout << -1; return 0; } uint64_t fit_n, fit_m; pair<uint64_t, uint64_t> curr; queue<pair<uint64_t,uint64_t>> to_split; queue<pair<uint64_t,uint64_t>> next_iteration; to_split.push({n,m}); uint64_t total =0; for (int i = dn-1; i>=0; i--) { while (to_split.size()>0){ curr = to_split.front(); to_split.pop(); fit_n = curr.first/d[i]; fit_m = curr.second/d[i]; total += fit_m*fit_n; // TODO: check XD if (fit_n * d[i] < curr.first) { next_iteration.push({ curr.first-fit_n * d[i], curr.second, }); } if (fit_m *d[i] < curr.second) { next_iteration.push({ fit_n * d[i], curr.second-fit_m * d[i], }); } } to_split = next_iteration; next_iteration = queue<pair<uint64_t,uint64_t>>(); } cout << total; } |