/*
Franciszek Pietrusiak
Zadanie: https://sio2.mimuw.edu.pl/c/pa-2024-1/p/obr/
*/
#include <bits/stdc++.h>
#define PB push_back
#define FR first
#define SD second
using namespace std;
using ll = long long;
using pii = pair<int, int>;
constexpr int MxN = 33;
ll d[MxN];
int n;
ll f(int h, int w, int st) {
if (h > w) swap(h, w);
if (h == 0) return 0;
for (int i=st; i<=n; i++) {
ll ileh = h / d[i];
ll ilew = w / d[i];
ll dh = d[i] * ileh;
ll dw = d[i] * ilew;
if (ileh > 0)
return ileh*ilew + f(h-dh, dw, i+1) + f(dh, w-dw, i+1) + f(h-dh, w-dw, i+1);
}
return 0;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
ll h, w; cin >> h >> w;
cin >> n;
for (int i=1; i<=n; i++)
cin >> d[i];
if ((h % d[1]) != 0 || (w % d[1]) != 0) {
cout << "-1\n";
return 0;
}
reverse(d+1, d+1+n);
cout << f(h, w, 1) << "\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 | /* Franciszek Pietrusiak Zadanie: https://sio2.mimuw.edu.pl/c/pa-2024-1/p/obr/ */ #include <bits/stdc++.h> #define PB push_back #define FR first #define SD second using namespace std; using ll = long long; using pii = pair<int, int>; constexpr int MxN = 33; ll d[MxN]; int n; ll f(int h, int w, int st) { if (h > w) swap(h, w); if (h == 0) return 0; for (int i=st; i<=n; i++) { ll ileh = h / d[i]; ll ilew = w / d[i]; ll dh = d[i] * ileh; ll dw = d[i] * ilew; if (ileh > 0) return ileh*ilew + f(h-dh, dw, i+1) + f(dh, w-dw, i+1) + f(h-dh, w-dw, i+1); } return 0; } int main() { ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); ll h, w; cin >> h >> w; cin >> n; for (int i=1; i<=n; i++) cin >> d[i]; if ((h % d[1]) != 0 || (w % d[1]) != 0) { cout << "-1\n"; return 0; } reverse(d+1, d+1+n); cout << f(h, w, 1) << "\n"; return 0; } |
English