#include <iostream> using namespace std; int main() { long h,w,w1=0, h1=0, nn, obr=0; cin >> h >> w >> nn; //obr - obrazy do kupienia int const n = nn; long d[n]; bool temp2k; for(int i=0; i<n; i++) { cin >> d[i]; } for(int i=n-1; i>=0; i--) { if(temp2k==true) //jak w1 wieksze (prostokat h x w1) { if(w1%d[i]==0 and h%d[i]==0) // przypadek 1 kiedy mozna wszystko najwiekszymi { obr=obr +((w1/d[i])*(h/d[i])); } else //if(w1%d[i]==0 or h%d[i]==0) //przypadek 2 gdy jedno sie zeruje { if(w1%d[i]==0) // jak w sie zeruje { obr = obr + ((w1/d[i])*(h/d[i])); h=h%d[i]; } if(h%d[i]==0) // jak h sie zeruje { obr = obr + ((w1/d[i])*(h/d[i])); w1=w1%d[i]; } } if(w%d[i]==0 and h1%d[i]==0) // przypadek 1 kiedy mozna wszystko najwiekszymi { obr=obr +((w/d[i])*(h1/d[i])); } else //if(w%d[i]==0 or h1%d[i]==0) //przypadek 2 gdy jedno sie zeruje { if(w%d[i]==0) // jak w sie zeruje { obr = obr + ((w/d[i])*(h1/d[i])); h1=h1%d[i]; } if(h1%d[i]==0) // jak h sie zeruje { obr = obr + ((w/d[i])*(h1/d[i])); w=w%d[i]; } } } else //normalnie na jednym prostokacie { if(w%d[i]==0 and h%d[i]==0) // przypadek 1 kiedy mozna wszystko najwiekszymi { cout << obr + ((w/d[i])*(h/d[i])); return 0; } if(w%d[i]==0 or h%d[i]==0) //przypadek 2 gdy jedno sie zeruje { if(w%d[i]==0) // jak w sie zeruje { obr = obr + ((w/d[i])*(h/d[i])); h=h%d[i]; } if(h%d[i]==0) // jak h sie zeruje { obr = obr + ((w/d[i])*(h/d[i])); w=w%d[i]; } } if(w%d[i]!=0 and h%d[i]!=0) // przypadek 3 jak nic sie nie zeruje { w1= w%d[i]; h1 = h%d[i]; if(w1>=h1) { temp2k=true; w=w-w1; } else { temp2k=true; h=h-h1; } } } } if(w==0 and h==0 and w1==0 and h1==0) cout << obr; else cout<< -1; 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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | #include <iostream> using namespace std; int main() { long h,w,w1=0, h1=0, nn, obr=0; cin >> h >> w >> nn; //obr - obrazy do kupienia int const n = nn; long d[n]; bool temp2k; for(int i=0; i<n; i++) { cin >> d[i]; } for(int i=n-1; i>=0; i--) { if(temp2k==true) //jak w1 wieksze (prostokat h x w1) { if(w1%d[i]==0 and h%d[i]==0) // przypadek 1 kiedy mozna wszystko najwiekszymi { obr=obr +((w1/d[i])*(h/d[i])); } else //if(w1%d[i]==0 or h%d[i]==0) //przypadek 2 gdy jedno sie zeruje { if(w1%d[i]==0) // jak w sie zeruje { obr = obr + ((w1/d[i])*(h/d[i])); h=h%d[i]; } if(h%d[i]==0) // jak h sie zeruje { obr = obr + ((w1/d[i])*(h/d[i])); w1=w1%d[i]; } } if(w%d[i]==0 and h1%d[i]==0) // przypadek 1 kiedy mozna wszystko najwiekszymi { obr=obr +((w/d[i])*(h1/d[i])); } else //if(w%d[i]==0 or h1%d[i]==0) //przypadek 2 gdy jedno sie zeruje { if(w%d[i]==0) // jak w sie zeruje { obr = obr + ((w/d[i])*(h1/d[i])); h1=h1%d[i]; } if(h1%d[i]==0) // jak h sie zeruje { obr = obr + ((w/d[i])*(h1/d[i])); w=w%d[i]; } } } else //normalnie na jednym prostokacie { if(w%d[i]==0 and h%d[i]==0) // przypadek 1 kiedy mozna wszystko najwiekszymi { cout << obr + ((w/d[i])*(h/d[i])); return 0; } if(w%d[i]==0 or h%d[i]==0) //przypadek 2 gdy jedno sie zeruje { if(w%d[i]==0) // jak w sie zeruje { obr = obr + ((w/d[i])*(h/d[i])); h=h%d[i]; } if(h%d[i]==0) // jak h sie zeruje { obr = obr + ((w/d[i])*(h/d[i])); w=w%d[i]; } } if(w%d[i]!=0 and h%d[i]!=0) // przypadek 3 jak nic sie nie zeruje { w1= w%d[i]; h1 = h%d[i]; if(w1>=h1) { temp2k=true; w=w-w1; } else { temp2k=true; h=h-h1; } } } } if(w==0 and h==0 and w1==0 and h1==0) cout << obr; else cout<< -1; return 0; } |