#include <iostream> using namespace std; int main() { long long h; long long w; cin >> h; cin >> w; long long h1; long long w1; if (h > w) { h1 = w; w1 = h; } else { h1 = h; w1 = w; } //robimy tak zeby wysokosc byla krotksza long long n; cin >> n; long long tab[30]; for (int i = 0; i < n; i++) cin >> tab[i]; long long x; x = tab[0]; if (h1 % x != 0) { cout << "-1"; return 0; } else if (w1 % x != 0) { cout << "-1"; return 0; } h1 /= x; w1 /= x; long long tab2[30]; for (int i = 0; i < n; i++) tab2[i] = tab[i] / x; long long h2,w2; h2 = h1; // height - wysokosc --- u nas na poczatku wysokosc jest krotsza w2 = w1; //width - szerokosc long long szerokosc_kolumny; long long iterator_kolumnowy; long long suma_kolumny = 0; long long suma = 0; long long szerokosc; long long ilosc_h; long long ilosc_w; //debug /* cout << endl << endl; cout << h1 << " " << w1 << endl << endl; for (int i = 0; i < n; i++) cout << tab2[i] << " "; cout << endl << endl; */ // //mamy teraz tablice x - ow i szerokosc i wyskosc x-owa for (int i = n - 1; i >= 0; i--) { // do uzupelniania szerokosci h2 = h1; for (int j = n - 1; j >= 0; j--) { if (tab2[j] <= min(h2, w2)) { iterator_kolumnowy = j; break; } } // w2 bedzie sie zmienialo, natomiast h2 z kazdym obrotem petli bedzie rowne h1 suma_kolumny = 0; //suma naszej kolumny, ktora potem bedzie przemnozona przez szerokosc szerokosc_kolumny = tab2[iterator_kolumnowy]; // szerokosc naszej kolumny w x szerokosc = w2 / szerokosc_kolumny; // to jest mnoznik naszego wyniku - bo tyle takich kolumn musimy zrobic for (int j = iterator_kolumnowy; j >= 0; j--) { if (tab2[j] > min(h2, w2)) continue; ilosc_w = szerokosc_kolumny / tab2[j]; //bedzie zawsze bez reszty bo wielokrotnosci ilosc_h = h2 / tab2[j]; suma_kolumny += (ilosc_w * ilosc_h); h2 -= (ilosc_h * tab2[j]); } suma += (suma_kolumny * szerokosc); w2 -= szerokosc_kolumny * szerokosc; } cout << suma; 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include <iostream> using namespace std; int main() { long long h; long long w; cin >> h; cin >> w; long long h1; long long w1; if (h > w) { h1 = w; w1 = h; } else { h1 = h; w1 = w; } //robimy tak zeby wysokosc byla krotksza long long n; cin >> n; long long tab[30]; for (int i = 0; i < n; i++) cin >> tab[i]; long long x; x = tab[0]; if (h1 % x != 0) { cout << "-1"; return 0; } else if (w1 % x != 0) { cout << "-1"; return 0; } h1 /= x; w1 /= x; long long tab2[30]; for (int i = 0; i < n; i++) tab2[i] = tab[i] / x; long long h2,w2; h2 = h1; // height - wysokosc --- u nas na poczatku wysokosc jest krotsza w2 = w1; //width - szerokosc long long szerokosc_kolumny; long long iterator_kolumnowy; long long suma_kolumny = 0; long long suma = 0; long long szerokosc; long long ilosc_h; long long ilosc_w; //debug /* cout << endl << endl; cout << h1 << " " << w1 << endl << endl; for (int i = 0; i < n; i++) cout << tab2[i] << " "; cout << endl << endl; */ // //mamy teraz tablice x - ow i szerokosc i wyskosc x-owa for (int i = n - 1; i >= 0; i--) { // do uzupelniania szerokosci h2 = h1; for (int j = n - 1; j >= 0; j--) { if (tab2[j] <= min(h2, w2)) { iterator_kolumnowy = j; break; } } // w2 bedzie sie zmienialo, natomiast h2 z kazdym obrotem petli bedzie rowne h1 suma_kolumny = 0; //suma naszej kolumny, ktora potem bedzie przemnozona przez szerokosc szerokosc_kolumny = tab2[iterator_kolumnowy]; // szerokosc naszej kolumny w x szerokosc = w2 / szerokosc_kolumny; // to jest mnoznik naszego wyniku - bo tyle takich kolumn musimy zrobic for (int j = iterator_kolumnowy; j >= 0; j--) { if (tab2[j] > min(h2, w2)) continue; ilosc_w = szerokosc_kolumny / tab2[j]; //bedzie zawsze bez reszty bo wielokrotnosci ilosc_h = h2 / tab2[j]; suma_kolumny += (ilosc_w * ilosc_h); h2 -= (ilosc_h * tab2[j]); } suma += (suma_kolumny * szerokosc); w2 -= szerokosc_kolumny * szerokosc; } cout << suma; return 0; } |