#include <iostream> using namespace std; typedef long long LL; LL H; LL W; LL uzyte = 0; LL N; LL rozmiary[37]; // Height, cost pair<LL, LL> getMaxStrip(LL H, LL W) { LL j = 0; while (rozmiary[j] > min(H, W)) { j++; } LL STRHEIGHT = rozmiary[j]; LL elementy = 0; while (W > 0) { while (rozmiary[j] > W) { j++; } LL cost = STRHEIGHT / rozmiary[j]; LL amount = W / rozmiary[j]; elementy += amount * cost; W -= amount * rozmiary[j]; } return {STRHEIGHT, elementy}; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> H >> W; cin >> N; for (int i = 1; i <= N; i++) { cin >> rozmiary[N-i]; } if (H % rozmiary[N-1] || W % rozmiary[N-1]) { cout << "-1\n"; return 0; } while (H > 0) { pair<LL, LL> strip = getMaxStrip(H, W); LL amount = H / strip.first; H -= strip.first * amount; uzyte += strip.second * amount; } cout << uzyte << '\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 56 57 58 59 60 61 62 63 64 65 66 67 | #include <iostream> using namespace std; typedef long long LL; LL H; LL W; LL uzyte = 0; LL N; LL rozmiary[37]; // Height, cost pair<LL, LL> getMaxStrip(LL H, LL W) { LL j = 0; while (rozmiary[j] > min(H, W)) { j++; } LL STRHEIGHT = rozmiary[j]; LL elementy = 0; while (W > 0) { while (rozmiary[j] > W) { j++; } LL cost = STRHEIGHT / rozmiary[j]; LL amount = W / rozmiary[j]; elementy += amount * cost; W -= amount * rozmiary[j]; } return {STRHEIGHT, elementy}; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> H >> W; cin >> N; for (int i = 1; i <= N; i++) { cin >> rozmiary[N-i]; } if (H % rozmiary[N-1] || W % rozmiary[N-1]) { cout << "-1\n"; return 0; } while (H > 0) { pair<LL, LL> strip = getMaxStrip(H, W); LL amount = H / strip.first; H -= strip.first * amount; uzyte += strip.second * amount; } cout << uzyte << '\n'; return 0; } |