#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; } |
English