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