Submission #23136675


Source Code Expand

import sys
import numpy as np


if __name__ == "__main__":
    if sys.argv[-1] == 'ONLINE_JUDGE':
        import numba
        try:
            from numba.experimental import jitclass
        except ImportError:
            from numba import jitclass
        from numba.pycc import CC

        @jitclass([("parent_or_size", numba.int32[:]), ])
        class union_find:
            def __init__(self, n):
                self.parent_or_size = np.full(n, -1, dtype=np.int32)

            def find(self, x):
                p = x
                while self.parent_or_size[p] >= 0:
                    p = self.parent_or_size[p]
                while self.parent_or_size[x] >= 0:
                    tmp = self.parent_or_size[x]
                    self.parent_or_size[x] = p
                    x = tmp
                return p

            def same(self, x, y):
                return self.find(x) == self.find(y)

            def size(self, x):
                return -self.parent_or_size[self.find(x)]

            def union(self, x, y):
                x = self.find(x)
                y = self.find(y)
                if x == y:
                    return False
                if self.size(x) < self.size(y):
                    x, y = y, x
                self.parent_or_size[x] += self.parent_or_size[y]
                self.parent_or_size[y] = x
                return True

        def solve(inp):
            h, w, q = inp[:3]
            uf = union_find(h * w)
            painted = np.zeros((h, w), dtype=np.bool8)
            adj = ((0, 1), (1, 0), (0, -1), (-1, 0))
            idx = 3
            for _ in range(q):
                t = inp[idx]
                idx += 1
                if t == 1:
                    i, j = inp[idx: idx + 2] - 1
                    idx += 2
                    painted[i, j] = True
                    for di, dj in adj:
                        ti = i + di
                        tj = j + dj
                        if 0 <= ti < h and 0 <= tj < w and painted[ti, tj]:
                            uf.union(i * w + j, ti * w + tj)
                else:
                    i1, j1, i2, j2 = inp[idx: idx + 4] - 1
                    idx += 4
                    print("Yes" if painted[i1, j1]
                          and uf.same(i1 * w + j1, i2 * w + j2) else "No")

        cc = CC('my_module')
        cc.export('solve', 'void(int32[:])')(solve)
        cc.compile()
    else:
        from my_module import solve
        solve(np.fromstring(open(0).read(), dtype=np.int32, sep=' '))

Submission Info

Submission Time
Task 012 - Red Painting(★4)
User riantkb
Language Python (3.8.2)
Score 4
Code Size 2533 Byte
Status AC
Exec Time 179 ms
Memory 48560 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 4 / 4
Status
AC × 3
AC × 43
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt
Case Name Status Exec Time Memory
sample_01.txt AC 115 ms 27040 KiB
sample_02.txt AC 110 ms 27144 KiB
sample_03.txt AC 110 ms 27036 KiB
subtask_1_01.txt AC 168 ms 31656 KiB
subtask_1_02.txt AC 127 ms 31804 KiB
subtask_1_03.txt AC 142 ms 32160 KiB
subtask_1_04.txt AC 148 ms 39448 KiB
subtask_1_05.txt AC 141 ms 30440 KiB
subtask_1_06.txt AC 128 ms 28220 KiB
subtask_1_07.txt AC 143 ms 29356 KiB
subtask_1_08.txt AC 154 ms 34276 KiB
subtask_1_09.txt AC 128 ms 29968 KiB
subtask_1_10.txt AC 141 ms 29020 KiB
subtask_1_11.txt AC 125 ms 33464 KiB
subtask_1_12.txt AC 109 ms 28496 KiB
subtask_1_13.txt AC 126 ms 29728 KiB
subtask_1_14.txt AC 128 ms 28524 KiB
subtask_1_15.txt AC 148 ms 35744 KiB
subtask_1_16.txt AC 144 ms 41864 KiB
subtask_1_17.txt AC 140 ms 35164 KiB
subtask_1_18.txt AC 112 ms 27684 KiB
subtask_1_19.txt AC 133 ms 28736 KiB
subtask_1_20.txt AC 156 ms 32264 KiB
subtask_1_21.txt AC 153 ms 43716 KiB
subtask_1_22.txt AC 116 ms 36096 KiB
subtask_1_23.txt AC 131 ms 34016 KiB
subtask_1_24.txt AC 142 ms 34700 KiB
subtask_1_25.txt AC 144 ms 31248 KiB
subtask_1_26.txt AC 113 ms 29824 KiB
subtask_1_27.txt AC 156 ms 29956 KiB
subtask_1_28.txt AC 159 ms 29776 KiB
subtask_1_29.txt AC 163 ms 29820 KiB
subtask_1_30.txt AC 161 ms 29908 KiB
subtask_1_31.txt AC 162 ms 32168 KiB
subtask_1_32.txt AC 159 ms 29144 KiB
subtask_1_33.txt AC 153 ms 29288 KiB
subtask_1_34.txt AC 150 ms 47468 KiB
subtask_1_35.txt AC 172 ms 48216 KiB
subtask_1_36.txt AC 172 ms 48212 KiB
subtask_1_37.txt AC 179 ms 48452 KiB
subtask_1_38.txt AC 178 ms 48560 KiB
subtask_1_39.txt AC 174 ms 48240 KiB
subtask_1_40.txt AC 171 ms 48328 KiB