#include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); long long int n, m, k; cin >> n >> m >> k; long long int obrazy[k]; for (long long int i = 0; i < k; i++) { cin >> obrazy[i]; } if (n % obrazy[0] != 0 || m % obrazy[0] != 0) { cout << -1; return 0; } if (n > m) swap(n, m); long long int c = upper_bound(obrazy, obrazy + k, n) - obrazy-1; long long int wynik = 0; long long int a = n, b = m; while (a > 0) { b = m; long long int w = 0; long long int p = c; while (b > 0) { w += (b/obrazy[p])*(obrazy[c]/obrazy[p]); b -= (b/obrazy[p])*obrazy[p]; p--; } wynik += w * (a/obrazy[c]); a -= (a/obrazy[c])*obrazy[c]; c--; } cout << wynik; 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 | #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); long long int n, m, k; cin >> n >> m >> k; long long int obrazy[k]; for (long long int i = 0; i < k; i++) { cin >> obrazy[i]; } if (n % obrazy[0] != 0 || m % obrazy[0] != 0) { cout << -1; return 0; } if (n > m) swap(n, m); long long int c = upper_bound(obrazy, obrazy + k, n) - obrazy-1; long long int wynik = 0; long long int a = n, b = m; while (a > 0) { b = m; long long int w = 0; long long int p = c; while (b > 0) { w += (b/obrazy[p])*(obrazy[c]/obrazy[p]); b -= (b/obrazy[p])*obrazy[p]; p--; } wynik += w * (a/obrazy[c]); a -= (a/obrazy[c])*obrazy[c]; c--; } cout << wynik; return 0; } |