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