#include <bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long ll;
const int MAX = 33;
ll tab[MAX];
struct trem{
ll a;
ll b;
ll numer;
};
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll w, h;
cin >> w >> h;
map<ll, ll> mapka;
ll n;
cin >> n;
for(int i = 1; i <= n; ++i) {
cin >> tab[i];
}
vector<trem> array;
ll res = 0;
ll akt_numer = 1;
array.pb({w, h, akt_numer});
mapka[akt_numer] = n;
for(int j = 0; j < array.size(); ++j) {
ll a = array[j].a, b = array[j].b;
ll akt_dlugosc = tab[mapka[array[j].numer]];
ll dziel1 = a / akt_dlugosc;
ll dziel2 = b / akt_dlugosc;
if(dziel1 == 0 || dziel2 == 0) {
++akt_numer;
array.push_back({a, b, akt_numer});
mapka[akt_numer] = mapka[array[j].numer] - 1;
if(mapka[akt_numer] == 0) {
cout << -1;
return 0;
}
continue;
}
res += (dziel1 * dziel2);
ll reszta1 = a % akt_dlugosc;
ll reszta2 = b % akt_dlugosc;
if(reszta1 != 0) {
++akt_numer;
array.pb({reszta1, b, akt_numer});
mapka[akt_numer] = mapka[array[j].numer] - 1;
if(mapka[akt_numer] == 0) {
cout << -1;
return 0;
}
}
if(reszta2 != 0) {
++akt_numer;
array.pb({dziel1 * akt_dlugosc, reszta2, akt_numer});
mapka[akt_numer] = mapka[array[j].numer] - 1;
if(mapka[akt_numer] == 0) {
cout << -1;
return 0;
}
}
}
cout << res;
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <bits/stdc++.h> #define pb push_back using namespace std; typedef long long ll; const int MAX = 33; ll tab[MAX]; struct trem{ ll a; ll b; ll numer; }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll w, h; cin >> w >> h; map<ll, ll> mapka; ll n; cin >> n; for(int i = 1; i <= n; ++i) { cin >> tab[i]; } vector<trem> array; ll res = 0; ll akt_numer = 1; array.pb({w, h, akt_numer}); mapka[akt_numer] = n; for(int j = 0; j < array.size(); ++j) { ll a = array[j].a, b = array[j].b; ll akt_dlugosc = tab[mapka[array[j].numer]]; ll dziel1 = a / akt_dlugosc; ll dziel2 = b / akt_dlugosc; if(dziel1 == 0 || dziel2 == 0) { ++akt_numer; array.push_back({a, b, akt_numer}); mapka[akt_numer] = mapka[array[j].numer] - 1; if(mapka[akt_numer] == 0) { cout << -1; return 0; } continue; } res += (dziel1 * dziel2); ll reszta1 = a % akt_dlugosc; ll reszta2 = b % akt_dlugosc; if(reszta1 != 0) { ++akt_numer; array.pb({reszta1, b, akt_numer}); mapka[akt_numer] = mapka[array[j].numer] - 1; if(mapka[akt_numer] == 0) { cout << -1; return 0; } } if(reszta2 != 0) { ++akt_numer; array.pb({dziel1 * akt_dlugosc, reszta2, akt_numer}); mapka[akt_numer] = mapka[array[j].numer] - 1; if(mapka[akt_numer] == 0) { cout << -1; return 0; } } } cout << res; return 0; } |
English