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
75
76
77
78
79
80
81
82
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);

    int w, h;
    cin >> w >> h;
    if (h > w)
    {
        int temp = w;
        w = h;
        h = temp;
    }

    int n;
    cin >> n;

    vector<int> types;
    for (int i = 0; i < n; ++i)
    {
        int t;
        cin >> t;
        if (t <= w)
        {
            types.push_back(t);
        }
    }

    bool is_possible = true;
    int answer = 0;
    int done = 0;

    n = types.size();

    for (int i = n - 1; i > -1; --i)
    {
        int type = types[i];
        int times = (w - done) / type;
        if (h % type == 0)
        {
            answer += times * (h / type);
            done += type * times;
        }
        else
        {
            int needed = h % type;
            int sol = 1;
            bool possible = false;
            for (int j = i - 1; j > -1; --j)
            {
                if (needed % types[j] == 0)
                {
                    sol = types[j];
                    possible = true;
                    break;
                }
            }
            if (possible)
            {
                if (type % sol == 0)
                {
                    answer += times * type + (type % sol) * sol;

                    done += type * times;
                }
                else
                {
                    is_possible = false;
                    break;
                }
            }
        }
    }

    cout << (is_possible && answer > 0 ? answer : -1) << endl;

    return 0;
}