#include <bits/stdc++.h>
using namespace std;
vector<int> v;
int n;
long long ile(int h, int w) {
if(h==0 || w==0) return 0;
int idx = -1;
for(int i=n-1; i>=0; i--) {
if(v[i] <= h && v[i] <= w) {
idx = i;
break;
}
}
if(idx == -1) return -1;
long long ileW = w/v[idx];
long long ileH = h/v[idx];
long long wyn = ileW * ileH;
long long dol = ile(h%v[idx],v[idx]*ileW);
long long bok = ile(v[idx]*ileH,w%v[idx]);
long long skos = ile(h%v[idx], w%v[idx]);
if(dol == -1 || bok == -1 || skos == -1) return -1;
return wyn + dol + bok + skos;
}
int main(){
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
int W,H;
cin>>H>>W>>n;
v = vector<int>(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
sort(v.begin(), v.end());
long long w = ile(H,W);
cout<<w<<"\n";
}
/*
10 10
3
1 2 10
6 10
3
1 3 6
3 3
1
2
4 4
2 3 1
8 7
3 1 6 2
8 7
2 6 2
1000000000
1000000000
1 1
*/
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 | #include <bits/stdc++.h> using namespace std; vector<int> v; int n; long long ile(int h, int w) { if(h==0 || w==0) return 0; int idx = -1; for(int i=n-1; i>=0; i--) { if(v[i] <= h && v[i] <= w) { idx = i; break; } } if(idx == -1) return -1; long long ileW = w/v[idx]; long long ileH = h/v[idx]; long long wyn = ileW * ileH; long long dol = ile(h%v[idx],v[idx]*ileW); long long bok = ile(v[idx]*ileH,w%v[idx]); long long skos = ile(h%v[idx], w%v[idx]); if(dol == -1 || bok == -1 || skos == -1) return -1; return wyn + dol + bok + skos; } int main(){ std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int W,H; cin>>H>>W>>n; v = vector<int>(n); for(int i=0;i<n;i++){ cin>>v[i]; } sort(v.begin(), v.end()); long long w = ile(H,W); cout<<w<<"\n"; } /* 10 10 3 1 2 10 6 10 3 1 3 6 3 3 1 2 4 4 2 3 1 8 7 3 1 6 2 8 7 2 6 2 1000000000 1000000000 1 1 */ |
English