diff --git a/zeta_python/completed/2630.py b/zeta_python/completed/2630.py new file mode 100644 index 0000000..7196ee4 --- /dev/null +++ b/zeta_python/completed/2630.py @@ -0,0 +1,73 @@ +import sys + +input = sys.stdin.readline + + +N: int # late-init + + +def partition(L, P): + """get subdivisions of partition and check is valid of its subdivision""" + half = L // 2 + + quad = [[], [], [], []] + + for i in range(L): + for j in range(L): + if 0 <= i < half: + if 0 <= j < half: + quad[0].append(P[i * L + j]) + else: + quad[1].append(P[i * L + j]) + else: + if 0 <= j < half: + quad[2].append(P[i * L + j]) + else: + quad[3].append(P[i * L + j]) + ret = [] + for q in quad: + a = not any(q) + b = all(q) + if a: + ret.append((True, 0)) + elif b: + ret.append((True, 1)) + else: + ret.append((False, half, q)) + return ret + + +def solve(N: int, M: list[int]): + """main DFS process""" + cnt_0 = 0 + cnt_1 = 0 + if all(M): + return 0, 1 + elif not any(M): + return 1, 0 + + D = [(N, M)] # stack for DFS + + while D: + L, P = D.pop() + parted = partition(L, P) + for p in parted: + if p[0]: + _, cnt = p + if cnt: + cnt_1 += 1 + else: + cnt_0 += 1 + else: + _, new_L, new_P = p + D.append((new_L, new_P)) + + return cnt_0, cnt_1 + + +if __name__ == "__main__": + N = int(input()) + print( + *solve(N, sum([list(map(int, input().split())) for _ in range(N)], [])), + sep="\n" + )