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