만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

현금 인출기

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

요약
각 상한 b 이하의 금액 중 그리디 알고리즘이 지폐를 가장 많이 내놓는 금액과 그때의 지폐 수를 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그리디, 이분 탐색
정답자
아직 제출이 없습니다

문제

어떤 화폐 체계든 다룰 수 있는 범용 현금 인출기를 개발하고 있다. 어떤 나라의 화폐 체계에서 n종류의 지폐를 쓰며, 액면가는 a1, a2, ..., an이다. 모든 액면가는 서로 다르고 오름차순으로 나열되어 있다. 즉 i > 2이면 ai−1<aia_{i-1} < a_i이고, a1=1a_1 = 1이다.

인출기는 다음 탐욕 알고리즘으로 지폐를 내준다. 고객이 금액 c를 요청했다고 하자. 처음에는 내줄 지폐의 묶음이 비어 있다. 각 단계에서 알고리즘은 묶음의 액면가 합이 c를 넘지 않는 범위에서 가능한 가장 큰 액면가의 지폐를 추가한다. 묶음의 액면가 합이 정확히 c가 되면 알고리즘은 멈춘다. 액면가 a1=1a_1 = 1인 지폐가 있으므로 알고리즘은 항상 유한한 단계 안에 끝난다.

이 알고리즘의 효율을 평가하려면, 요청할 수 있는 최대 금액이 b일 때 한 번에 내줘야 할 지폐 수의 최댓값을 구해야 한다. 최대 금액은 고객의 서비스 등급에 따라 달라질 수 있으므로, q개의 금액 b1, b2, ..., bq에 대해 질문에 답해야 한다.

지폐 액면가 목록과 요청 가능한 최대 금액이 주어졌을 때, 최대 개수의 지폐가 나오도록 고객이 요청해야 할 금액과 그때의 지폐 수를 구하는 프로그램을 작성하라.

입력

첫째 줄에 지폐 종류의 수 n이 주어진다 (1 ≤ n ≤ 200000).

둘째 줄에 서로 다른 정수 n개 ai가 주어진다 (1 = a1 < a2 < ... < an ≤ 101810^{18}).

셋째 줄에 질의의 수 q가 주어진다 (1 ≤ q ≤ 200000).

다음 q개 줄에는 각각 정수 bi 하나가 주어진다 (1 ≤ bi ≤ 101810^{18}).

출력

각 질의에 대해 최대 개수의 지폐가 나오도록 요청해야 할 금액과 그때의 지폐 수, 두 수를 출력한다.

최대 금액 이하의 금액 중 최대 개수의 지폐를 주는 금액이 여럿이면, 그중 아무거나 출력해도 된다.

힌트

예시에서 2는 1 + 1로, 8은 5 + 1 + 1 + 1로, 49는 10 + 10 + 10 + 10 + 5 + 1 + 1 + 1 + 1로 내준다.

예제1

  1. 예제 1

    입력
    4
    1 5 10 50
    3
    2
    8
    50
    
    예상 출력
    2 2
    8 4
    49 9