시스템 호출
시간 제한1초메모리 제한512 MB
모든 파일에 쓸 버퍼 크기 K를 하나 정해, 각 파일마다 ceil(F_i/K) 곱하기 (T+K)의 합을 최소로 만드는 K를 구한다.
문제
유닉스 계열 운영체제에서는 파일을 읽기 위해 read()라는 시스템 호출을 제공한다. 크기가 바이트인 버퍼를 전달하면, read()는 그 버퍼에 파일을 읽어 들이며, 한 번 호출하는 데 걸리는 시간은 이다. 여기서 는 호출 한 번당 고정적으로 걸리는 시간이다. 이 수행 시간은 버퍼의 크기에만 의존하고, 실제로 읽은 바이트 수에는 의존하지 않는다. 예를 들어 버퍼 크기가 10바이트이면 3바이트를 읽든 7바이트를 읽든 항상 의 시간이 걸린다.
크기가 바이트인 파일 하나를 읽으려면 read()를 번 호출해야 한다. 크기가 바이트인 개의 파일을 모두 읽는 데 걸리는 총 시간은 다음과 같다.
민규는 모든 파일에 같은 버퍼 크기 를 사용하기로 했다. 단, 는 1 이상의 정수이다. 총 읽기 시간을 가장 짧게 만드는 버퍼 크기 를 구하라.
입력
첫째 줄에는 파일의 개수 이 주어진다. 둘째 줄에는 각 파일의 크기를 나타내는 개의 자연수 가 바이트 단위로 주어진다. 셋째 줄에는 고정 호출 시간 가 주어진다. 는 0 이상의 정수이다.
출력
주어진 파일을 모두 읽는 데 걸리는 가장 짧은 총 시간과, 그 시간을 달성하는 버퍼 크기 를 공백으로 구분하여 출력한다. 가장 짧은 시간이 되는 가 여러 개라면 그중 가장 작은 값을 출력한다.
힌트
Linux는 대표적인 유닉스 계열 운영체제이다. macOS 역시 유닉스 계열이며, 그 밖에 FreeBSD, NetBSD, Solaris 등이 있다.