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