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