/* 2024 * Maciej Szeptuch */ #include <cstdio> const int MAX_PAINTINGS = 31; int width; int height; int paintings; int size[MAX_PAINTINGS]; long long int fill(int p, int w, int h); int main(void) { scanf("%d %d %d", &width, &height, &paintings); for(int p = 0; p < paintings; ++p) scanf("%d", &size[p]); if(width % size[0] || height % size[0]) { puts("-1"); return 0; } printf("%lld\n", fill(paintings - 1, width, height)); return 0; } inline long long int fill(int p, int w, int h) { if(w == 0 || h == 0 || p < 0) return 0; int wc = w / size[p]; int hc = h / size[p]; return (long long int)wc * hc + fill(p - 1, w - wc * size[p], hc * size[p]) + fill(p - 1, w, h - hc * size[p]); }
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 | /* 2024 * Maciej Szeptuch */ #include <cstdio> const int MAX_PAINTINGS = 31; int width; int height; int paintings; int size[MAX_PAINTINGS]; long long int fill(int p, int w, int h); int main(void) { scanf("%d %d %d", &width, &height, &paintings); for(int p = 0; p < paintings; ++p) scanf("%d", &size[p]); if(width % size[0] || height % size[0]) { puts("-1"); return 0; } printf("%lld\n", fill(paintings - 1, width, height)); return 0; } inline long long int fill(int p, int w, int h) { if(w == 0 || h == 0 || p < 0) return 0; int wc = w / size[p]; int hc = h / size[p]; return (long long int)wc * hc + fill(p - 1, w - wc * size[p], hc * size[p]) + fill(p - 1, w, h - hc * size[p]); } |