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
#include <iostream>

using namespace std;

int main()
{
    long h,w,w1=0, h1=0, nn, obr=0; cin >> h >> w >> nn;  //obr - obrazy do kupienia
    int const n = nn; long d[n]; bool temp2k;
    for(int i=0; i<n; i++)
    {
        cin >> d[i];
    }
    for(int i=n-1; i>=0; i--)
    {
        if(temp2k==true)   //jak w1 wieksze (prostokat h x w1)
        {
            if(w1%d[i]==0 and h%d[i]==0)   // przypadek 1 kiedy mozna wszystko najwiekszymi
            {
                obr=obr +((w1/d[i])*(h/d[i]));
            }
            else //if(w1%d[i]==0 or h%d[i]==0)  //przypadek 2 gdy jedno sie zeruje
            {
                if(w1%d[i]==0)    // jak w sie zeruje
                {
                    obr = obr + ((w1/d[i])*(h/d[i]));
                    h=h%d[i];
                }
                if(h%d[i]==0)    // jak h sie zeruje
                {
                    obr = obr + ((w1/d[i])*(h/d[i]));
                    w1=w1%d[i];
                }
            }
            if(w%d[i]==0 and h1%d[i]==0)   // przypadek 1 kiedy mozna wszystko najwiekszymi
            {
                obr=obr +((w/d[i])*(h1/d[i]));
            }
            else //if(w%d[i]==0 or h1%d[i]==0)  //przypadek 2 gdy jedno sie zeruje
            {
                if(w%d[i]==0)    // jak w sie zeruje
                {
                    obr = obr + ((w/d[i])*(h1/d[i]));
                    h1=h1%d[i];
                }
                if(h1%d[i]==0)    // jak h sie zeruje
                {
                    obr = obr + ((w/d[i])*(h1/d[i]));
                    w=w%d[i];
                }
            }
        }


        else   //normalnie na jednym prostokacie
        {
            if(w%d[i]==0 and h%d[i]==0)   // przypadek 1 kiedy mozna wszystko najwiekszymi
            {
                cout << obr + ((w/d[i])*(h/d[i]));
                return 0;
            }
            if(w%d[i]==0 or h%d[i]==0)  //przypadek 2 gdy jedno sie zeruje
            {
                if(w%d[i]==0)    // jak w sie zeruje
                {
                    obr = obr + ((w/d[i])*(h/d[i]));
                    h=h%d[i];
                }
                if(h%d[i]==0)    // jak h sie zeruje
                {
                    obr = obr + ((w/d[i])*(h/d[i]));
                    w=w%d[i];
                }
            }
            if(w%d[i]!=0 and h%d[i]!=0)   // przypadek 3 jak nic sie nie zeruje
            {
                w1= w%d[i];
                h1 = h%d[i];
                if(w1>=h1)
                    {
                        temp2k=true;
                        w=w-w1;
                    }
                else
                    {
                        temp2k=true;
                        h=h-h1;
                    }
            }
        }
    }
    if(w==0 and h==0 and w1==0 and h1==0)
        cout << obr;
    else
        cout<< -1;
    return 0;
}