풍선 부풀리기

면접 대비

시간 제한2초메모리 제한512 MB

요약
크기 1부터 n까지의 풍선과 헬륨 용량을 짝지어 용량을 넘지 않으면서 풍선별 충전 비율의 최솟값을 최대화합니다.
난이도

보통10점 중 4점

유형
그리디, 정렬
정답자
아직 제출이 없습니다

문제

NWERC 2018을 맞아 주최진은 풍선에 특별한 준비를 했다. 크기가 같은 풍선을 사는 대신, 1부터 n까지의 모든 정수 크기의 풍선을 하나씩 샀다. 크기 s인 풍선의 용량은 s 데시리터이다.

풍선을 손으로 부풀리는 일을 피하기 위해, 주최진은 헬륨 가스통도 n개 샀다. 각 가스통은 풍선 하나를 부풀리는 데에만 쓸 수 있고, 그 풍선에 전부 비워 넣어야 한다. 가스통을 완전히 사용하기 전에 풍선에서 분리할 수는 없다.

안타깝게도 가스통은 벼룩시장에서 산 것이라 들어 있는 헬륨의 양이 제각각일 수 있다. 어떤 것은 비어 있을 수도 있다. 이 까다로운 상황을 최대한 잘 헤쳐 나가려면 가스통을 풍선에 영리하게 짝지어야 한다.

주최진은 모든 가스통을 서로 다른 풍선에 배정하되, 용량에 비해 가장 적게 부풀려진 풍선에 들어 있는 헬륨의 비율이 최대가 되게 하려고 한다. 이렇게 할 때 가능한 (최소 비율의) 최댓값은 얼마인가?

용량을 넘겨 부풀린 풍선은 터진다. 터지는 일은 좋지 않으니 반드시 피해야 한다.

입력

입력은 다음과 같이 주어진다.

  • 풍선과 가스통의 개수 n (1 ≤ n ≤ 2 · 105)이 적힌 한 줄.
  • n개의 정수 c1, . . . , cn (각 i에 대해 0 ≤ ci ≤ n)이 적힌 한 줄. 가스통에 든 헬륨의 양을 데시리터 단위로 나타낸다.

출력

모든 풍선을 터뜨리지 않고 부풀릴 수 있으면, 모든 풍선을 용량의 최소 f 비율까지 부풀릴 수 있는 최대 비율 f를 출력한다. 그렇지 않으면 “impossible”을 출력한다.

답의 절대 오차 또는 상대 오차는 10−6 이하여야 한다.

예제3

  1. 예제 1

    입력
    6
    6 1 3 2 2 3
    
    예상 출력
    0.6
    
  2. 예제 2

    입력
    2
    2 2
    
    예상 출력
    impossible
    
  3. 예제 3

    입력
    5
    4 0 2 1 2
    
    예상 출력
    0