Submission #31278667


Source Code Expand

import bisect
from collections import deque
DX = [0, -1, 0, 1]
DY = [-1, 0, 1, 0]

w, h = map(int, input().split())
n = int(input())
x1 = [0] * n
y1 = [0] * n
x2 = [0] * n
y2 = [0] * n
for i in range(n):
    x1[i], y1[i], x2[i], y2[i] = map(int, input().split())
all_x = sorted(set(x1 + x2 + [0, w]))
all_y = sorted(set(y1 + y2 + [0, h]))
w = len(all_x) - 1
h = len(all_y) - 1
grid = [[0] * (h + 1) for i in range(w + 1)] # grid[x][y] の順とする
for i in range(n):
    x1[i] = bisect.bisect_left(all_x, x1[i])
    x2[i] = bisect.bisect_left(all_x, x2[i])
    y1[i] = bisect.bisect_left(all_y, y1[i])
    y2[i] = bisect.bisect_left(all_y, y2[i])
    grid[x1[i]][y1[i]] += 1
    grid[x1[i]][y2[i]] -= 1
    grid[x2[i]][y1[i]] -= 1
    grid[x2[i]][y2[i]] += 1
for i in range(w):
    for j in range(h):
        if i > 0:
            grid[i][j] += grid[i - 1][j]
        if j > 0:
            grid[i][j] += grid[i][j - 1]
        if (i > 0) and (j > 0):
            grid[i][j] -= grid[i - 1][j - 1]

vis = [[0] * h for i in range(w)]
answer = 0
for i in range(w):
    for j in range(h):
        if (grid[i][j] == 0) and (vis[i][j] == 0):
            answer += 1
            vis[i][j] = 1
            q = deque()
            q.append([i, j])
            def push(x2, y2):
                if not (0 <= x2 < w) or not (0 <= y2 < h):
                    return
                if (grid[x2][y2] > 0) or (vis[x2][y2] == 1):
                    return
                vis[x2][y2] = 1
                q.append([x2, y2])
            while len(q) != 0:
                x, y = q.popleft()
                for k in range(4):
                    push(x + DX[k], y + DY[k])
print(answer)

Submission Info

Submission Time
Task E - ペンキの色
User Pro_ktmr
Language PyPy3 (7.3.0)
Score 6
Code Size 1729 Byte
Status MLE
Exec Time 507 ms
Memory 155128 KiB

Judge Result

Set Name set01 set02 set03 set04 set05 set06 set07 set08 set09 set10 set11 set12 set13 set14 set15 set16 set17 set18 set19 set20
Score / Max Score 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1 0 / 1
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
MLE × 1
Set Name Test Cases
set01 data1
set02 data2
set03 data3
set04 data4
set05 data5
set06 data6
set07 data7
set08 data8
set09 data9
set10 data10
set11 data11
set12 data12
set13 data13
set14 data14
set15 data15
set16 data16
set17 data17
set18 data18
set19 data19
set20 data20
Case Name Status Exec Time Memory
data1 AC 69 ms 65072 KiB
data10 MLE 150 ms 80896 KiB
data11 MLE 233 ms 137408 KiB
data12 MLE 369 ms 145768 KiB
data13 MLE 489 ms 155128 KiB
data14 MLE 240 ms 94524 KiB
data15 MLE 251 ms 96040 KiB
data16 MLE 250 ms 137232 KiB
data17 MLE 232 ms 108408 KiB
data18 MLE 415 ms 124468 KiB
data19 MLE 507 ms 149328 KiB
data2 AC 60 ms 64892 KiB
data20 MLE 162 ms 91044 KiB
data3 AC 58 ms 65004 KiB
data4 AC 56 ms 65000 KiB
data5 AC 56 ms 65136 KiB
data6 AC 56 ms 65252 KiB
data7 MLE 108 ms 75180 KiB
data8 MLE 108 ms 74912 KiB
data9 MLE 143 ms 80192 KiB