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
#include <cstdio>
#define DEBUG false
int wys, szer, y, x, n, okno[32],maxPole,maxOkno,tempIle;
long long ile;
int main(){
    scanf(" %d %d %d",&wys,&szer,&n);
    for(int i=n; i>0; i--){
        scanf(" %d",&okno[i]);
    }
    //zagospodaruj dostepna przestrzen
    maxOkno = 0;
    ile = 0;
    x=szer;
    while(x>0){
        y = wys;
        if(DEBUG)printf("pozostala szerokosc: %d, maxPole: %d\n",x,maxOkno);
        if(x<y)
            maxPole = x;
        else
            maxPole = y;
        if(DEBUG)printf("MaxPole: %d\n",maxPole);
        bool znaleziono = false;
        maxOkno = -1;
        tempIle = 0;
        for(int i=1; i<=n; i++){

            if(maxPole /okno[i] < 1 )
                continue;
            if(!znaleziono){
                //printf("--mpole %d okno:%d\n",maxPole,okno[i]);
                maxOkno = okno[i];
                znaleziono = true;
                if(DEBUG)printf("maxOkno:%d\n",maxOkno);
            }
            tempIle += (y / okno[i]) * (maxOkno / okno[i]);
            if(DEBUG)printf("i:%d, ile:%d\n",i,tempIle);
            y %= okno[i];
            if(y==0) break;
        }
        if(y!=0){
            printf("-1\n");
            return 0;
        }
        ile += ((long long)(x/maxOkno)) * ((long long)tempIle);
        szer %= maxOkno;
        x = szer;
    }
    if(x!=0)
        printf("-1\n");
    else
        printf("%lld\n",ile);

    return 0;
}