#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"; } |
English