#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdint>
int64_t pokrycie(int64_t wysokosc, int64_t szerokosc, std::vector<int64_t> &rozmiary) {
if (wysokosc == 0 || szerokosc == 0) {
std::cerr << wysokosc << "x" << szerokosc << ": " << 0 << "\n";
return 0;
}
for (auto it = rozmiary.begin(); it != rozmiary.end(); ++it) {
int64_t rozmiar = *it;
if ((szerokosc < rozmiar) || (wysokosc < rozmiar)) {
std::cerr << wysokosc << "x" << szerokosc << ": ";
std::cerr << rozmiar << "continue" << "\n";
continue;
}
int64_t wdr = wysokosc / rozmiar;
int64_t sdr = szerokosc / rozmiar;
int64_t wrr = wysokosc % rozmiar;
int64_t srr = szerokosc % rozmiar;
int64_t wynik =
+ sdr * wdr
+ pokrycie(wysokosc-wrr, srr, rozmiary)
+ pokrycie(wrr, szerokosc-srr, rozmiary)
+ pokrycie(wrr , srr, rozmiary)
;
std::cerr << wysokosc << "x" << szerokosc << ": " << wynik << "\n";
return wynik;
}
std::cerr << wysokosc << "x" << szerokosc << ": " << "else" << "\n";
return 0;
}
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
int64_t wysokosc;
int64_t szerokosc;
int64_t rozmiarow;
std::vector<int64_t> rozmiary;
std::cin >> wysokosc;
std::cin >> szerokosc;
std::cin >> rozmiarow;
rozmiary.resize(rozmiarow);
for (int64_t i=0; i<rozmiarow; ++i) {
std::cin >> rozmiary[rozmiarow-1-i];
}
for (int64_t i : rozmiary) { std::cerr << i << ", "; } std::cerr << "\n";
if ((szerokosc % rozmiary.back() != 0) || (wysokosc % rozmiary.back() != 0)) {
std::cout << -1;
return 0;
}
int64_t obrazow = pokrycie(wysokosc, szerokosc, rozmiary);
std::cout << obrazow;
}
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 | #include <iostream> #include <vector> #include <algorithm> #include <cstdint> int64_t pokrycie(int64_t wysokosc, int64_t szerokosc, std::vector<int64_t> &rozmiary) { if (wysokosc == 0 || szerokosc == 0) { std::cerr << wysokosc << "x" << szerokosc << ": " << 0 << "\n"; return 0; } for (auto it = rozmiary.begin(); it != rozmiary.end(); ++it) { int64_t rozmiar = *it; if ((szerokosc < rozmiar) || (wysokosc < rozmiar)) { std::cerr << wysokosc << "x" << szerokosc << ": "; std::cerr << rozmiar << "continue" << "\n"; continue; } int64_t wdr = wysokosc / rozmiar; int64_t sdr = szerokosc / rozmiar; int64_t wrr = wysokosc % rozmiar; int64_t srr = szerokosc % rozmiar; int64_t wynik = + sdr * wdr + pokrycie(wysokosc-wrr, srr, rozmiary) + pokrycie(wrr, szerokosc-srr, rozmiary) + pokrycie(wrr , srr, rozmiary) ; std::cerr << wysokosc << "x" << szerokosc << ": " << wynik << "\n"; return wynik; } std::cerr << wysokosc << "x" << szerokosc << ": " << "else" << "\n"; return 0; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int64_t wysokosc; int64_t szerokosc; int64_t rozmiarow; std::vector<int64_t> rozmiary; std::cin >> wysokosc; std::cin >> szerokosc; std::cin >> rozmiarow; rozmiary.resize(rozmiarow); for (int64_t i=0; i<rozmiarow; ++i) { std::cin >> rozmiary[rozmiarow-1-i]; } for (int64_t i : rozmiary) { std::cerr << i << ", "; } std::cerr << "\n"; if ((szerokosc % rozmiary.back() != 0) || (wysokosc % rozmiary.back() != 0)) { std::cout << -1; return 0; } int64_t obrazow = pokrycie(wysokosc, szerokosc, rozmiary); std::cout << obrazow; } |
English