#include <bits/stdc++.h> #define pb push_back using namespace std; typedef vector<int> vi; typedef pair<int, int> pii; int d[33]; long long sum; void pol(int h, int w, int n) { if(h > w) swap(h, w); if(h == 0) return; int w1; int h1 = h; for(int i = n-1; i >= 0; i--) { if(d[i] <= h) { sum += w / d[i]; w1 = w/d[i]*d[i]; h1 -= d[i]; break; } } for(int i = n-1; i >= 0; i--) { while(h1 >= d[i]) { sum += w1 / d[i]; h1 -= d[i]; } } pol(h, w - w1, n); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int h, w, n; cin >> h >> w >> n; for(int i = 0; i < n; i++) cin >> d[i]; if(h % d[0] != 0 || w % d[0] != 0) cout << -1 << "\n"; else { pol(h, w, n); cout << sum << "\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 50 51 52 53 54 55 | #include <bits/stdc++.h> #define pb push_back using namespace std; typedef vector<int> vi; typedef pair<int, int> pii; int d[33]; long long sum; void pol(int h, int w, int n) { if(h > w) swap(h, w); if(h == 0) return; int w1; int h1 = h; for(int i = n-1; i >= 0; i--) { if(d[i] <= h) { sum += w / d[i]; w1 = w/d[i]*d[i]; h1 -= d[i]; break; } } for(int i = n-1; i >= 0; i--) { while(h1 >= d[i]) { sum += w1 / d[i]; h1 -= d[i]; } } pol(h, w - w1, n); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int h, w, n; cin >> h >> w >> n; for(int i = 0; i < n; i++) cin >> d[i]; if(h % d[0] != 0 || w % d[0] != 0) cout << -1 << "\n"; else { pol(h, w, n); cout << sum << "\n"; } return 0; } |