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

int main()
{
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);
    std::cout.tie(NULL);
    
    long x, y;
    int ile_rodzajow_obrazow;
    int i, j;
    int obrazy[31];
    
    int obrazy_pionowo[31] ={};
    int obrazy_poziomo[31] = {};

    std::cin >> x;
    std::cin >> y;
    
    std::cin >> ile_rodzajow_obrazow;
    
    for(i=0; i<ile_rodzajow_obrazow; ++i)
    {
        std::cin >> obrazy[ile_rodzajow_obrazow-i-1];// od najwiekszego
    }
    if((x%obrazy[ile_rodzajow_obrazow-1]==0) && (y%obrazy[ile_rodzajow_obrazow-1]==0)) // da sie oblozyc cala sciane
    {
//        auto startwhile = std::chrono::high_resolution_clock::now();
        int ktory_obraz_x = 0;
        int ktory_obraz_y = 0;
        do
        {
            if(obrazy[ktory_obraz_x]<=x)  // obraz sie zmiesci
            {
                obrazy_pionowo[ktory_obraz_x] = x / obrazy[ktory_obraz_x];
                x-=(obrazy_pionowo[ktory_obraz_x] * obrazy[ktory_obraz_x]);
            }
            if(obrazy[ktory_obraz_y]<=y)  // obraz sie zmiesci
            {
                obrazy_poziomo[ktory_obraz_y] = y / obrazy[ktory_obraz_y];
                y-=(obrazy_poziomo[ktory_obraz_y] * obrazy[ktory_obraz_y]);
            }
            ++ktory_obraz_x;
            ++ktory_obraz_y;
        } while(x>0 || y>0);
//        auto endwhile = std::chrono::high_resolution_clock::now();
//        std::cout<<"do whiles take "<<(endwhile-startwhile).count()<<" time\n";
        
        long ile_obrazow=0;
        int dzielnik;
        
//        auto startfor = std::chrono::high_resolution_clock::now();
        for(i=0; i<ile_rodzajow_obrazow; i++)  // pionowo
        {
            for(j=0; j< ile_rodzajow_obrazow; j++)  //poziomo
            {
                if (obrazy[i] > obrazy[j]) ile_obrazow += (((long)obrazy_pionowo[i] ) * ((long)obrazy_poziomo[j]) * (obrazy[i]/obrazy[j]) );
                else if (obrazy[i] < obrazy[j]) ile_obrazow += (((long)obrazy_pionowo[i]) * ((long)obrazy_poziomo[j]) * (obrazy[j]/obrazy[i]) );
                else ile_obrazow += (((long)obrazy_pionowo[i]) * ((long)obrazy_poziomo[j]));
            }
        }
//        auto endfor = std::chrono::high_resolution_clock::now();
//        std::cout<<"fors take "<<(endfor-startfor).count()<<" time\n";
        
        std::cout << ile_obrazow;
    }
    else
    {
        std::cout << "-1";
    }

    return 0;
}