#include <iostream> #include <vector> using namespace std; vector<unsigned long long> rozmiary; unsigned long long liczba=0; unsigned long long n; bool wypelnij(unsigned long long h,unsigned long long w,unsigned long long idx) { if(h==0||w==0) { return true; } unsigned long long x=0; for(idx;idx<n;++idx) { if(rozmiary[idx]<=h&&rozmiary[idx]<=w) { x=rozmiary[idx]; break; } } if(x==0) { return false; } unsigned long long ilosc_pion=h/x; unsigned long long ilosc_poziom=w/x; unsigned long long wysokosc=ilosc_pion*x; unsigned long long szerokosc=ilosc_poziom*x; unsigned long long ilosc=ilosc_pion*ilosc_poziom; liczba+=ilosc; return(wypelnij(h-wysokosc,w,idx)&&wypelnij(wysokosc,w-szerokosc,idx)); } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); unsigned long long h,w; cin>>h>>w>>n; rozmiary=vector<unsigned long long>(n); for(unsigned long long i=0;i<n;++i) { cin>>rozmiary[n-i-1]; } if(wypelnij(h,w,0)) cout<<liczba<<endl; else cout<<-1<<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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <iostream> #include <vector> using namespace std; vector<unsigned long long> rozmiary; unsigned long long liczba=0; unsigned long long n; bool wypelnij(unsigned long long h,unsigned long long w,unsigned long long idx) { if(h==0||w==0) { return true; } unsigned long long x=0; for(idx;idx<n;++idx) { if(rozmiary[idx]<=h&&rozmiary[idx]<=w) { x=rozmiary[idx]; break; } } if(x==0) { return false; } unsigned long long ilosc_pion=h/x; unsigned long long ilosc_poziom=w/x; unsigned long long wysokosc=ilosc_pion*x; unsigned long long szerokosc=ilosc_poziom*x; unsigned long long ilosc=ilosc_pion*ilosc_poziom; liczba+=ilosc; return(wypelnij(h-wysokosc,w,idx)&&wypelnij(wysokosc,w-szerokosc,idx)); } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); unsigned long long h,w; cin>>h>>w>>n; rozmiary=vector<unsigned long long>(n); for(unsigned long long i=0;i<n;++i) { cin>>rozmiary[n-i-1]; } if(wypelnij(h,w,0)) cout<<liczba<<endl; else cout<<-1<<endl; } |