import math
h, w = [int(x) for x in input().split(" ")]
n = input()
ds = list(map(lambda x: int(x), input().split(" ")))
def findMaxD(h, w, ds):
max_d = 0
for d in ds:
if d <= w and d <= h:
max_d = d
else:
break
return max_d
def images(h, w, ds):
if h == 0 or w == 0:
return 0
d = findMaxD(h, w, ds)
if d == 0: return 0
upper = images(h - d, d, ds)
right = images(h, w - d, ds)
# if upper == -1 and right == -1:
# return -1
return 1 + upper + right
def main():
lcm_h = False
lcm_w = False
for d in ds:
if not lcm_h and math.lcm(d, h) == h:
lcm_h = True
if not lcm_w and math.lcm(d, w) == w:
lcm_w = True
if lcm_w and lcm_h:
print(images(h, w, ds))
else:
print(-1)
main()
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 | import math h, w = [int(x) for x in input().split(" ")] n = input() ds = list(map(lambda x: int(x), input().split(" "))) def findMaxD(h, w, ds): max_d = 0 for d in ds: if d <= w and d <= h: max_d = d else: break return max_d def images(h, w, ds): if h == 0 or w == 0: return 0 d = findMaxD(h, w, ds) if d == 0: return 0 upper = images(h - d, d, ds) right = images(h, w - d, ds) # if upper == -1 and right == -1: # return -1 return 1 + upper + right def main(): lcm_h = False lcm_w = False for d in ds: if not lcm_h and math.lcm(d, h) == h: lcm_h = True if not lcm_w and math.lcm(d, w) == w: lcm_w = True if lcm_w and lcm_h: print(images(h, w, ds)) else: print(-1) main() |
English