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