#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int maxn = 33;
int h, w, n, tab[maxn];
long long wyn;
long long bld(int wys, int lst){
long long ret = 0;
ret += wys/tab[lst];
if (wys%tab[lst])
ret += (tab[lst]/tab[lst-1])*bld(wys%tab[lst],lst-1);
return ret;
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> h >> w >> n;
for (int i = 1; i <= n; ++i){
cin >> tab[i];
}
if (h%tab[1] || w%tab[1])
cout << -1, exit(0);
for (int i = n; i > 0; --i){
if (h > w)
swap(h,w);
if (tab[i] > h)
continue;
wyn += (w/tab[i])*bld(h,i);
w = w%tab[i];
}
cout << wyn;
}
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 | #include <bits/stdc++.h> using namespace std; #define int long long constexpr int maxn = 33; int h, w, n, tab[maxn]; long long wyn; long long bld(int wys, int lst){ long long ret = 0; ret += wys/tab[lst]; if (wys%tab[lst]) ret += (tab[lst]/tab[lst-1])*bld(wys%tab[lst],lst-1); return ret; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> h >> w >> n; for (int i = 1; i <= n; ++i){ cin >> tab[i]; } if (h%tab[1] || w%tab[1]) cout << -1, exit(0); for (int i = n; i > 0; --i){ if (h > w) swap(h,w); if (tab[i] > h) continue; wyn += (w/tab[i])*bld(h,i); w = w%tab[i]; } cout << wyn; } |
English