#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll rec(ll w, ll h, vector <ll> &d, ll ind){
//cout << h << " " << w << "\n";
if(w == 0 || h == 0) return 0;
while(ind >= 0 && d[ind] > h){
ind--;
}
ll b = h%d[ind];
ll a = w;
ll c = h - b;
ll dd = w%d[ind];
if(c < dd) swap(c, dd);
return rec(a, b, d, ind) + rec(c, dd, d, ind) + (w/d[ind]) * (h/d[ind]);
}
int main(){
ll h, w;
cin >> h >> w;
ll n;
cin >> n;
vector <ll> d(n);
for(auto &x: d) cin >> x;
if(h%d[0] || w%d[0]){
cout << -1 << "\n";
return 0;
}
if(w < h) swap(w, h); // w > h
cout << rec(w, h, d, n-1) << "\n";
}
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 | #include <bits/stdc++.h> using namespace std; #define ll long long ll rec(ll w, ll h, vector <ll> &d, ll ind){ //cout << h << " " << w << "\n"; if(w == 0 || h == 0) return 0; while(ind >= 0 && d[ind] > h){ ind--; } ll b = h%d[ind]; ll a = w; ll c = h - b; ll dd = w%d[ind]; if(c < dd) swap(c, dd); return rec(a, b, d, ind) + rec(c, dd, d, ind) + (w/d[ind]) * (h/d[ind]); } int main(){ ll h, w; cin >> h >> w; ll n; cin >> n; vector <ll> d(n); for(auto &x: d) cin >> x; if(h%d[0] || w%d[0]){ cout << -1 << "\n"; return 0; } if(w < h) swap(w, h); // w > h cout << rec(w, h, d, n-1) << "\n"; } |
English