시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 (추가 시간 없음) | 1024 MB | 552 | 71 | 56 | 18.065% |
키파는 새로운 프로그래밍 언어를 만들었습니다. 이 프로그래밍 언어의 변수는 정확히 하나인데 지금부터 K라고 부르겠습니다. 최초에 K는 입력 값으로 설정됩니다.
이 변수에 시행하는 연산은 다음과 같이 정의됩니다.
+x
: K에 x를 더합니다.-x
: K에서 x를 뺍니다. 단, 이 프로그래밍 언어는 음이 아닌 정수만 처리할 수 있어서, 만일 K ≤ x이면 K는 0이 됩니다.*x
: K에 x를 곱합니다.이 프로그래밍 언어의 특이한 점은 각 줄에 두 개의 연산을 받는다는 점입니다. 실행은 다음과 같은 식으로 이루어집니다.
키파는 N개의 줄로 구성된 프로그램을 짰습니다. 이 프로그램의 가능한 출력 중 가장 큰 값은 무엇일까요?
첫째 줄에 N과 입력값 K0가 공백을 사이에 두고 주어집니다. (1 ≤ N ≤ 300 000, 0 ≤ K0 ≤ 109)
둘째 줄부터 N개의 줄에 프로그램이 주어집니다. 구체적으로, (i + 1)번째 줄에 위에서 설명한 형식으로 된 연산 두 개가 공백을 사이에 두고 주어집니다.
연산에 쓰이는 수 x는 모두 0 이상 109 이하의 정수입니다.
첫째 줄에 가능한 출력 중 가장 큰 값을 109 + 7로 나눈 나머지를 출력합니다.
가능한 출력을 109 + 7로 나눈 나머지를 최대화하는 것이 아님에 주의하세요.
3 15 +5 +10 -20 -30 *20 *10
100
가능한 실행 방법 중 하나는 다음과 같습니다.
+10
, 둘째 줄에서는 -20
, 셋째 줄에서는 *20
을 고릅니다.이렇게 실행하는 방법이 다른 방법에 비해 가장 큰 값을 출력함을 알 수 있습니다. 가장 큰 출력값인 100을 109 + 7로 나눈 나머지인 100을 출력합니다.
University > 서울대학교 > 2022 서울대학교 프로그래밍 경시대회 > Division 2 D번