Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

jay153의 PS 일지

BOJ 7783 본문

BOJ

BOJ 7783

jay153 2025. 2. 25. 20:13

 

https://www.acmicpc.net/problem/7783

 

코드

http://boj.kr/3bb472b769d84eae85fb645da11bbf8d

 

KBTU Open 2008 B

 

난이도 : P2

 

Elapse Time : 30min

 

우선 직사각형 2개를 골랐을 경우 어떤 이유에서든 각 직사각형은 상하좌우로 확장될 수 없다는 것을 먼저 생각했다. 그 후에는 먼저 직사각형 1개에 대해 가장 큰 직사각형을 구하는 방법에 대해 고민했다. 고민을 하던 중 행렬의 한 행을 bitset으로 저장해 놓으면 어떻게 될지 생각을 해보았다. 어떤 직사각형이 $i$번째 행부터 $j$번째 행까지 걸쳐있다고 할 때 $i$번째 행부터 $j$번째 행까지 bitwise or 연산을 해주었을 때 0인 열에만 직사각형이 존재 가능하다. $M$의 제한이 200이기 때문에 모든 $i$, $j$에 대해서 연속하는 0의 최대 길이를 계산하여 최대 면적을 구하면 $O(NM^2)$에 계산 가능하다. 이를 2개를 계산하는 것으로 확장할 생각을 해보았는데 두 직사각형에 겹치는 행이 없다면 prefix max와 suffix max를 미리 계산해 놓고 최대 면적 합을 쉽게 구할 수 있지만 두 직사각형이 같은 행을 공유하는 경우가 문제였다. 하지만 두 직사각형이 겹치지 않고 같은 행을 공유한다면 같은 열을 공유할 수는 없으므로 열에 대해서도 같은 방식으로 prefix max와 suffix max을 계산해 놓으면 모든 경우를 커버할 수 있고 이를 구현해 해결하였다.

'BOJ' 카테고리의 다른 글

BOJ 26399  (0) 2025.02.26
BOJ 17668  (0) 2025.02.25
BOJ 19045  (0) 2025.02.25
BOJ 16531  (0) 2025.02.25
BOJ 11858  (0) 2025.02.24