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