횃불이 키우기

면접 대비

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

요약
N일 동안 매일 A_i를 더하거나 크기를 2배로 늘리며 최대 k번 강화할 수 있을 때, 크기가 0 이하로 떨어지지 않으면서 얻을 수 있는 최종 크기의 최댓값을 구한다.
난이도

보통10점 중 6점

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

문제

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

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

ii일차의 용준이는 둘 중 하나의 행동을 선택할 수 있습니다.

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

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

NN일이 지났을 때, 횃불이가 가장 커질 때 크기를 출력하는 프로그램을 작성해주세요. 만약 횃불이의 크기가 101110^{11}을 넘게 될 경우, 횃불이는 메가 횃불이로 분류되고 횃불이의 크기를 나타내는 정수 대신 MEGA를 출력해야 합니다. 만약 어떤 경우에도 횃불이가 NN일차에 생존하지 못하면 −1-1을 출력합니다.

입력

첫 번째 줄에 횃불이를 키우는 날 NN과 횃불이를 강화할 수 있는 횟수 kk, 그리고 횃불이의 최초 크기(00일차)를 나타내는 정수 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개의 정수 A_1,A_2,...,A_NA\_1, A\_2, ..., A\_N이 공백으로 구분되어 주어집니다. A_iA\_i는 ii일차에 횃불이가 섭취하는 먹이의 영양분을 나타내는 값입니다. (−500≤ A_i≤ 500)(-500 \leq\ A\_i \leq\ 500)

출력

NN일차에 횃불이의 크기를 가장 크게 했을 경우 얼마나 커질 수 있는지 출력해 주세요. 메가 횃불이로 진화할 수 있다면 MEGA를, 그렇지 않다면 횃불이의 크기를 나타내는 정수를 출력해주세요. 만약 횃불이가 NN일차에 살아남을 수 없다면 −1-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