만드는 중입니다

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

횃불이 키우기

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

요약
N일 동안 매일 음식을 먹거나 최대 k번 크기를 두 배로 만들 때, 마지막 날 가능한 최대 크기를 구합니다. 10^11을 넘으면 MEGA, 살아남을 수 없으면 -1을 출력합니다.
난이도

보통10점 중 7점

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

문제

인천대학교의 마스코트, 횃불이는 매우 귀엽습니다. 따라서 용준이는 횃불이 키우기라는 게임을 하기로 했습니다. 횃불이 키우기는 NN일 동안 횃불이에게 먹이를 줘서 횃불이를 최대한 성장시키는 게임입니다.

횃불이는 정수로 표현되는 크기를 갖고, 초기 크기는 ss입니다. 횃불이의 크기가 0 이하의 정수가 되면 횃불이는 죽고 게임이 종료됩니다. ii일차에 먹이를 섭취하면 영양분 AiA_i만큼 크기가 증가합니다.

ii일차에 용준이는 다음 두 행동 중 하나를 선택할 수 있습니다.

  1. ii일차에 주어진 먹이를 횃불이에게 먹입니다. 이후 횃불이의 크기는 AiA_i만큼 증가합니다.
  2. 먹이 섭취를 포기하고 횃불이를 강화합니다. 이후 횃불이의 크기는 2배로 증가합니다.

단, 횃불이는 최대 kk번 강화할 수 있습니다.

NN일이 지났을 때, 횃불이의 크기를 가장 크게 만들면 그 크기가 얼마인지 구하는 프로그램을 작성하세요. 횃불이의 크기가 101110^{11}을 넘게 되면 횃불이는 메가 횃불이로 분류되며, 크기 대신 MEGA를 출력합니다. 어떤 경우에도 횃불이가 NN일차에 살아남지 못하면 -1을 출력합니다.

입력

첫 번째 줄에 횃불이를 키우는 날 NN, 횃불이를 강화할 수 있는 횟수 kk, 횃불이의 최초 크기(0일차) ss가 공백으로 구분되어 주어집니다. (1≤N≤200 0001 \leq N \leq 200\,000, 0≤k≤N0 \leq k \leq N, 1≤s≤1001 \leq s \leq 100)

두 번째 줄에 NN개의 정수 A1,A2,…,ANA_1, A_2, \ldots, A_N이 공백으로 구분되어 주어집니다. AiA_i는 ii일차에 횃불이가 섭취하는 먹이의 영양분입니다. (−500≤Ai≤500-500 \leq A_i \leq 500)

출력

NN일차에 횃불이의 크기를 가장 크게 했을 때 그 크기를 출력합니다. 메가 횃불이가 될 수 있다면 MEGA를, 그렇지 않다면 횃불이의 크기를 나타내는 정수를 출력합니다. 횃불이가 NN일차에 살아남을 수 없다면 -1을 출력합니다.

힌트

Python 사용자는 PyPy로 제출하는 것을 권장합니다.

예제3

  1. 예제 1

    입력
    8 2 3
    1 3 5 7 9 5 2 -3
    
    예상 출력
    132
    
  2. 예제 2

    입력
    30 30 100
    500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500
    
    예상 출력
    MEGA
    
  3. 예제 3

    입력
    8 1 6
    74 -303 -274 -113 -119 -251 354 -34
    
    예상 출력
    -1