만드는 중입니다

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

Springoalla

면접 대비

시간 제한5초메모리 제한1024 MB

요약
각 트랙의 왕복 시간이 주어질 때, 전체 구간과 절반 구간을 달려 총 시간이 t 이상이면서 최소가 되도록 고르고, 같은 시간이면 달리기 횟수가 가장 적은 방법을 구합니다.
난이도

보통10점 중 5점

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

문제

Springoalla는 달리기 연습을 좋아한다. 그녀는 총 nn개의 달리기 코스를 알고 있고, 각 코스를 끝까지 갔다가 되돌아오는 데 걸리는 시간을 정확히 안다. 새로운 코스를 처음 달릴 때 그녀는 그 코스를 더 잘 알게 된다. 구체적으로 절반 지점의 위치를 알게 되고, 그 지점에서 되돌아올 수 있다. 이 경우 그 이동 시간은 절반이 된다. 예를 들어 20분짜리 코스의 절반은 10분에 달릴 수 있지만, 이는 코스 전체를 한 번 달린 뒤에만 가능하다.

Springoalla는 최소 tt분 동안 연습하고 싶지만, 너무 오래 연습하고 싶지는 않다. 각 코스의 시간이 주어졌을 때, 그녀가 최소한 달려야 하는 시간 tst_s를 구하라. tst_s는 ts≥tt_s \ge t를 만족해야 하며 가능한 한 작아야 한다. tst_s분을 달리는 방법이 여럿이면, 달리기 횟수 nsn_s가 가장 작은 방법을 택한다. 출발점에서 멀어지는 이동은 코스 전체를 달리든 절반만 달리든 모두 한 번으로 센다.

입력

첫 줄에 정수 nn과 tt가 주어진다. 1≤n≤10001 \le n \le 1000은 달리기 코스의 수이고, 1≤t≤1000001 \le t \le 100000은 Springoalla가 연습하고 싶은 시간이다. 둘째 줄에는 정수 nn개 lil_i가 주어진다. 1≤li≤400001 \le l_i \le 40000이며, 각 lil_i는 짝수이고 코스 ii를 왕복하는 데 걸리는 분 단위 시간이다. tt는 짝수가 아닐 수도 있다.

출력

첫 줄에 tst_s와 nsn_s를 출력한다. tst_s는 달린 시간이고, nsn_s는 달리기 총 횟수다. 다음 줄에는 nn개의 정수를 출력하는데, ii번째 정수는 코스 ii에서 달린 시간(분)이다. 같은 tst_s와 nsn_s를 만족하는 해가 여럿이면 어느 것을 출력해도 된다.

예제4

  1. 예제 1

    입력
    3 23
    10 8 14
    
    예상 출력
    23 3
    15 8 0 
    
  2. 예제 2

    입력
    3 23
    8 12 14
    
    예상 출력
    24 2
    0 24 0 
    
  3. 예제 3

    입력
    1 3
    2
    
    예상 출력
    3 2
    3 
    
  4. 예제 4

    입력
    1 7
    4
    
    예상 출력
    8 2
    8