#include <iostream>
#include <numeric>
#include <vector>
#define nl '\n'
using namespace std;
using ll = long long;
ll res, w, h;
int n;
vector<ll> blocks;
int main()
{
cin>>w>>h>>n;
blocks.resize(n);
for(int i=0; i<n; i++){
cin>>blocks[i];
}
if(gcd(gcd(w, h), blocks[0]) != blocks[0]){
cout<<-1<<nl;
return 0;
}
vector<ll> decompx(n), decompy(n);
for(int i=n-1; i>=0; i--){
decompx[i] = w / blocks[i];
w %= blocks[i];
decompy[i] = h / blocks[i];
h %= blocks[i];
}
/*for(int i=0; i<n; i++){
cerr<<decompx[i]<<' ';
}
cerr<<nl;
for(int i=0; i<n; i++){
cerr<<decompy[i]<<' ';
}
cerr<<nl;*/
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
ll a = max(blocks[i], blocks[j]), b = gcd(blocks[i], blocks[j]);
res += decompx[i] * decompy[j] * a / b;
}
}
cout<<res<<nl;
return 0;
}
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 43 44 45 46 47 | #include <iostream> #include <numeric> #include <vector> #define nl '\n' using namespace std; using ll = long long; ll res, w, h; int n; vector<ll> blocks; int main() { cin>>w>>h>>n; blocks.resize(n); for(int i=0; i<n; i++){ cin>>blocks[i]; } if(gcd(gcd(w, h), blocks[0]) != blocks[0]){ cout<<-1<<nl; return 0; } vector<ll> decompx(n), decompy(n); for(int i=n-1; i>=0; i--){ decompx[i] = w / blocks[i]; w %= blocks[i]; decompy[i] = h / blocks[i]; h %= blocks[i]; } /*for(int i=0; i<n; i++){ cerr<<decompx[i]<<' '; } cerr<<nl; for(int i=0; i<n; i++){ cerr<<decompy[i]<<' '; } cerr<<nl;*/ for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ ll a = max(blocks[i], blocks[j]), b = gcd(blocks[i], blocks[j]); res += decompx[i] * decompy[j] * a / b; } } cout<<res<<nl; return 0; } |
English