| ps | |
|---|---|
| 링크 | acmicpc.net/… |
| 출처 | BOJ |
| 문제 번호 | 31412 |
| 문제명 | 군수품 창고 정리 |
| 레벨 | 플래티넘 5 |
| 분류 |
이분탐색 |
| 시간복잡도 | O(m!*m*logn*log(a*n)) |
| 인풋사이즈 | n<=500,000, m<=7, a<=1,000,000 |
| 사용한 언어 | Python 3.11 |
| 제출기록 | 93984KB / 668ms |
| 최고기록 | 668ms |
| 해결날짜 | 2024/02/20 |
| 출처 | |
"""Solution code for "BOJ 31412. 군수품 창고 정리".
- Problem link: https://www.acmicpc.net/problem/31412
- Solution link: http://www.teferi.net/ps/problems/boj/31412
Tags: [binary search]
"""
import bisect
import functools
import itertools
from teflib import binsearch
def is_vaild(limit, psum, b):
for b_perm in itertools.permutations(b):
prev = 0
for b_i in b_perm:
pos = bisect.bisect_right(psum, prev + b_i * limit)
if pos == len(psum):
return True
prev = psum[pos - 1]
return False
def main():
N, M = [int(x) for x in input().split()] # pylint: disable=unused-variable
a = [int(x) for x in input().split()]
b = [int(x) for x in input().split()]
psum = [v := 0] + [v := v + x for x in a]
is_valid_func = functools.partial(is_vaild, psum=psum, b=b)
answer = binsearch.minimum_valid_integer(1, sum(a) + 1, is_valid_func)
print(answer)
if __name__ == '__main__':
main()