사용자 도구

사이트 도구


ps:problems:boj:8017

Parcel

ps
링크acmicpc.net/…
출처BOJ
문제 번호8017
문제명Parcel
레벨플래티넘 5
분류

NGE

시간복잡도O(n^2)
인풋사이즈n<=2000
사용한 언어Python 3.13
제출기록64144KB / 1476ms
최고기록1476ms
해결날짜2026/02/27

풀이

  • O(n)의 '히스토그램에서 가장 큰 직사각형 찾기'를 1행~i행 까지로 만든 누적합 배열에 n번 적용하는 방식으로 O(n^2)에 풀수 있다.

코드

"""Solution code for "BOJ 8017. Parcel".

- Problem link: https://www.acmicpc.net/problem/8017
- Solution link: http://www.teferi.net/ps/problems/boj/8017

Tags: [subgrid]
"""

import sys
from teflib import seqtask

ARABLE = '0'
WASTE = '1'


def main():
    n = int(sys.stdin.readline())
    grid = [sys.stdin.readline().split() for _ in range(n)]

    answer = 0
    heights = [0] * n
    for row in grid:
        for i, v in enumerate(row):
            heights[i] = heights[i] + 1 if v == ARABLE else 0
        begs, ends = seqtask.max_ranges_for_each_min(heights)
        answer = max(
            answer,
            *((end - beg) * h for beg, end, h in zip(begs, ends, heights)),
        )

    print(answer)


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
H J E M᠎ B
 
ps/problems/boj/8017.txt · 마지막으로 수정됨: 2026/03/04 14:10 저자 teferi