아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

은행

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

요약
원에서 음수 자본을 양수로 뒤집을 때마다 양쪽 이웃 자본에서 같은 금액을 빼며 모든 자본을 0 이상으로 만드는 최소 뒤집기 횟수를 구합니다.
난이도

보통10점 중 7점

유형
그리디, 시뮬레이션, 수학
정답자
아직 제출이 없습니다

문제

원더랜드의 월 스트리트에는 은행이 nn개 있다. 은행은 원형으로 늘어서 있어서 은행마다 왼쪽 이웃과 오른쪽 이웃이 하나씩 있다. 첫 은행의 왼쪽 이웃은 마지막 은행이고, 마지막 은행의 오른쪽 이웃은 첫 은행이다. 은행에는 00번부터 n−1n-1번까지 번호가 붙어 있고, ii번 은행의 왼쪽 이웃은 (i−1+n) mod n(i-1+n) \bmod n번 은행, 오른쪽 이웃은 (i+1) mod n(i+1) \bmod n번 은행이다.

ii번 은행의 자본은 kik_i다. 모든 은행의 자본을 더한 값은 양수다.

어떤 은행 ii의 자본 kik_i가 음수이면, 은행 요정이 마법 이동을 한 번 써서 그 자본을 양수로 바꾼다. ki=−7k_i = -7이었다면 마법 이동 뒤에는 ki=7k_i = 7이 된다. 대가는 두 이웃이 치른다. 왼쪽 이웃과 오른쪽 이웃은 각각 자본이 ∣ki∣|k_i|만큼 줄어든다. 왼쪽 이웃의 자본이 55, 오른쪽 이웃의 자본이 1111이었다면 마법 이동 뒤에는 각각 −2-2와 44가 된다.

감소는 이웃 관계마다 따로 적용된다. 그래서 n=2n = 2이면 남은 한 은행이 왼쪽 이웃이면서 오른쪽 이웃이므로 자본이 2∣ki∣2|k_i|만큼 줄어든다. n=1n = 1이면 유일한 자본이 양수이므로 마법 이동을 쓸 상황이 생기지 않는다.

모든 은행의 자본을 00 이상으로 만들려면 은행 요정은 마법 이동을 최소 몇 번 해야 하는가?

입력

첫째 줄에 은행의 수 nn이 주어진다. (0<n<100000 < n < 10000)

둘째 줄에 월 스트리트에 놓인 순서대로 자본 k0,k1,…,kn−1k_0, k_1, \dots, k_{n-1}이 공백 하나로 구분되어 주어진다. 각 자본은 −32000<ki<32000-32000 < k_i < 32000인 정수이고, 전체 합은 양수다.

출력

마법 이동의 최소 횟수를 한 줄에 출력한다.

예제4

  1. 예제 1

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

    입력
    1
    7
    
    예상 출력
    0
    
  3. 예제 3

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

    입력
    5
    0 0 0 0 2
    
    예상 출력
    0