Problem:
Score : 300 points

Problem Statement

You are given an integer sequence of length N. The i-th term in the sequence is a_i.
In one operation, you can select a term and either increment or decrement it by one.

At least how many operations are necessary to satisfy the following conditions?

For every i (1≤i≤n), the sum of the terms from the 1-st through i-th term is not zero.

For every i (1≤i≤n-1), the sign of the sum of the terms from the 1-st through i-th term, is different from the sign of the sum of the terms from the 1-st through (i+1)-th term.

Constraints

2 ≤ n ≤ 10^5

|a_i| ≤ 10^9

Each a_i is an integer.

Input

Input is given from Standard Input in the following format:

n
a_1 a_2 ... a_n

Output

Print the minimum necessary count of operations.

Sample Input 1

4
1 -3 1 0

Sample Output 1

4

For example, the given sequence can be transformed into 1, -2, 2, -2 by four operations. The sums of the first one, two, three and four terms are 1, -1, 1 and -1, respectively, which satisfy the conditions.

Sample Input 2

5
3 -6 4 -5 7

Sample Output 2

0

The given sequence already satisfies the conditions.

Sample Input 3

6
-1 4 3 2 -5 4

Sample Output 3

8

Solution in Ruby (2.3.3) (judge verdict: Accepted)

=begin
1 -3 1 0
-> 4
1 -2 -1 -1

-1 4 3 2 -5 4
-> 8
-1 3 6 8 3 7
~ -1 3 -1 1 -4 0
~ ...
=end

n=gets.to_i
a=gets.split.map(&:to_i)

b=[a[0]]
n.times do |i|
  if i>0
    b<< b[i-1]+a[i]
  end
end

def calc(n, b)
  c=0
  cnt=0
  (n-1).times do |i|
    if (b[i]+c)*(b[i+1]+c)>=0
      bi=b[i]+c
      bi1=b[i+1]+c
      if bi1==0
        c = bi<0 ? c+1 : c-1
        cnt+=1
      elsif bi1>0
        c+=(-1-bi1)
        cnt+=-(-1-bi1)
      else
        c+=(1-bi1)
        cnt+=(1-bi1)
      end
    end
  end

  return cnt
end

if b[0]!=0
  ans=calc(n, b)
  if b[0]<0
    c=1-b[0]
    ans=[ans, c+calc(n, b.map{|e| e+c})].min
  else
    c=-1-b[0]
    ans=[ans, -c+calc(n, b.map{|e| e+c})].min
  end
  puts ans
else
  ans=[calc(n, b.map{|e| e+1}), calc(n, b.map{|e| e-1})].min
  puts ans+1
end

=begin
0 1 2
-> ?
0 1 3
~ 1 2 4
~ 1 -1 1
-> 4
0 1 3
~ -1 0 2
~ -1 1 3
~ -1 1 -1
-> 6

1 100 4
-> ?
1 101 105
~ 1 -1 3
-> 102
1 101 105
-> -1 99 103
-> -1 99 -1
-> 106
=end