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()