|
| 1 | +import sys |
| 2 | + |
| 3 | +N, M, K = map(int, sys.stdin.readline().split()) |
| 4 | +paper = [[0 for _ in range(M)] for _ in range(N)] |
| 5 | + |
| 6 | + |
| 7 | +def is_valid(r, c, sticker): |
| 8 | + if r + len(sticker) > N or c + len(sticker[0]) > M: |
| 9 | + return False |
| 10 | + for _r in range(len(sticker)): |
| 11 | + for _c in range(len(sticker[0])): |
| 12 | + if sticker[_r][_c] == 1 and paper[r + _r][c + _c] == 1: |
| 13 | + return False |
| 14 | + return True |
| 15 | + |
| 16 | + |
| 17 | +def turn_clockwise(sticker): |
| 18 | + R, C = len(sticker), len(sticker[0]) |
| 19 | + turned = [[0 for _ in range(R)] for _ in range(C)] |
| 20 | + for r in range(R): |
| 21 | + for c in range(C): |
| 22 | + turned[c][R - r - 1] = sticker[r][c] |
| 23 | + return turned |
| 24 | + |
| 25 | + |
| 26 | +def put_sticker(r, c, sticker): |
| 27 | + for _r in range(len(sticker)): |
| 28 | + for _c in range(len(sticker[0])): |
| 29 | + if sticker[_r][_c] == 1: |
| 30 | + paper[r + _r][c + _c] = sticker[_r][_c] |
| 31 | + |
| 32 | + |
| 33 | +def search(sticker): |
| 34 | + for r in range(N): |
| 35 | + for c in range(M): |
| 36 | + if is_valid(r, c, sticker): |
| 37 | + return r, c |
| 38 | + return -1, -1 |
| 39 | + |
| 40 | + |
| 41 | +for i in range(K): |
| 42 | + R, C = map(int, sys.stdin.readline().split()) |
| 43 | + sticker = [list(map(int, sys.stdin.readline().split())) for _ in range(R)] |
| 44 | + turn_cnt, flag = 0, False |
| 45 | + while turn_cnt < 4: |
| 46 | + r, c = search(sticker) |
| 47 | + if r < 0: |
| 48 | + sticker = turn_clockwise(sticker) |
| 49 | + turn_cnt += 1 |
| 50 | + else: |
| 51 | + flag = True |
| 52 | + break |
| 53 | + if flag: |
| 54 | + put_sticker(r, c, sticker) |
| 55 | + |
| 56 | +answer = 0 |
| 57 | +for r in range(N): |
| 58 | + for c in range(M): |
| 59 | + if paper[r][c] == 1: |
| 60 | + answer += 1 |
| 61 | +print(answer) |
0 commit comments