#include <iostream> using namespace std; typedef long long int I; I h,w,n; I d[50]; I r; int oblicz2(I dd, I h, int i) { if (i < 0) return h*dd; I a = h/d[i]; r+=a*dd/d[i]; return oblicz2(dd, h-a*d[i], i-1); } int oblicz(I h, I w, int i) { if (i < 0) return h*w; I a = h/d[i]; I b = w/d[i]; r += a*b; I rr = oblicz2(a*d[i], w-b*d[i], i-1); rr += oblicz2(b*d[i], h-a*d[i], i-1); if (rr) return rr; return oblicz(h-a*d[i], w-b*d[i],i-1); } int main() { cin >> h >> w >> n; for(I i=0;i<n;i++) cin >> d[i]; I zero = oblicz(h,w,n-1); if(zero != 0) r = -1; cout << r << "\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 | #include <iostream> using namespace std; typedef long long int I; I h,w,n; I d[50]; I r; int oblicz2(I dd, I h, int i) { if (i < 0) return h*dd; I a = h/d[i]; r+=a*dd/d[i]; return oblicz2(dd, h-a*d[i], i-1); } int oblicz(I h, I w, int i) { if (i < 0) return h*w; I a = h/d[i]; I b = w/d[i]; r += a*b; I rr = oblicz2(a*d[i], w-b*d[i], i-1); rr += oblicz2(b*d[i], h-a*d[i], i-1); if (rr) return rr; return oblicz(h-a*d[i], w-b*d[i],i-1); } int main() { cin >> h >> w >> n; for(I i=0;i<n;i++) cin >> d[i]; I zero = oblicz(h,w,n-1); if(zero != 0) r = -1; cout << r << "\n"; } |