#include<bits/stdc++.h>
using namespace std;
long long n, d[100];
long long h, w, odp;
void rek(int i, int wys, int szer){
//cout << i << " " << wys << " " << szer << endl;
odp+=(wys%d[i])/d[i-1]*szer/d[i-1]+(szer%d[i])/d[i-1]*wys/d[i-1]-(szer%d[i])*(wys%d[i])/d[i-1]/d[i-1];
//cout << (wys%d[i])/d[i-1]*szer/d[i-1]+(szer%d[i])/d[i-1]*wys/d[i-1] << endl;
if(i==n)return;
rek(i+1, wys/d[i]*d[i], szer/d[i]*d[i]);
}
int main(){
cin >> h >> w;
cin >> n;
for(int i=0;i<n;i++)cin >> d[i];
d[n]=1000000001;
if(h%d[0]!=0 || w%d[0]!=0){
cout << -1 << endl;
return 0;
}
rek(1, h, w);
cout << odp << endl;
}
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 | #include<bits/stdc++.h> using namespace std; long long n, d[100]; long long h, w, odp; void rek(int i, int wys, int szer){ //cout << i << " " << wys << " " << szer << endl; odp+=(wys%d[i])/d[i-1]*szer/d[i-1]+(szer%d[i])/d[i-1]*wys/d[i-1]-(szer%d[i])*(wys%d[i])/d[i-1]/d[i-1]; //cout << (wys%d[i])/d[i-1]*szer/d[i-1]+(szer%d[i])/d[i-1]*wys/d[i-1] << endl; if(i==n)return; rek(i+1, wys/d[i]*d[i], szer/d[i]*d[i]); } int main(){ cin >> h >> w; cin >> n; for(int i=0;i<n;i++)cin >> d[i]; d[n]=1000000001; if(h%d[0]!=0 || w%d[0]!=0){ cout << -1 << endl; return 0; } rek(1, h, w); cout << odp << endl; } |
English