#include <iostream>
using namespace std;
int dim[30];
long long int countSquares(int h, int w, int n)
{
if (dim[0] > h)
{
return 0;
}
int maxi = 0;
int dist = h;
long long int cntS = 0;
while (dim[maxi + 1] <= h && maxi <= n - 2) maxi++;
for (int i = maxi; i >= 0 && dist > 0; i--)
{
int count = dist / dim[i];
cntS += count * (dim[maxi] / dim[i]);
dist %= dim[i];
}
return cntS * (w / dim[maxi]) + countSquares(w % dim[maxi], h, maxi);
}
int main()
{
int h, w, n;
cin >> h >> w >> n;
for (int i = 0; i < n; i++)
{
cin >> dim[i];
}
if (w < h) swap(w, h);
if (dim[0] > h || h % dim[0] != 0 || w % dim[0] != 0)
{
cout << "-1" << endl;
}
else
{
cout << countSquares(h, w, n) << endl;
}
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 | #include <iostream> using namespace std; int dim[30]; long long int countSquares(int h, int w, int n) { if (dim[0] > h) { return 0; } int maxi = 0; int dist = h; long long int cntS = 0; while (dim[maxi + 1] <= h && maxi <= n - 2) maxi++; for (int i = maxi; i >= 0 && dist > 0; i--) { int count = dist / dim[i]; cntS += count * (dim[maxi] / dim[i]); dist %= dim[i]; } return cntS * (w / dim[maxi]) + countSquares(w % dim[maxi], h, maxi); } int main() { int h, w, n; cin >> h >> w >> n; for (int i = 0; i < n; i++) { cin >> dim[i]; } if (w < h) swap(w, h); if (dim[0] > h || h % dim[0] != 0 || w % dim[0] != 0) { cout << "-1" << endl; } else { cout << countSquares(h, w, n) << endl; } return 0; } |
English