def calc_area(v_end, v_start, v_max, dt):

    kouten_v = (v_end + v_start + dt) / 2

    kouten_t = kouten_v - v_start

    kouten_t_limit1 = max(v_max - v_start, 0)

    kouten_t_limit2 = min(v_end + dt - v_max, dt)

    if 0 < kouten_t < dt:

        area = (v_start + kouten_v) * kouten_t / 2

        area +=  (v_end + kouten_v) * (dt - kouten_t) / 2

        area -=  (kouten_t_limit2  - kouten_t_limit1) * max(0, (kouten_v - v_max)) / 2

    else:

        area = (v_start + v_end) *  dt / 2

    return area



n=int(eval(input()))

t=[int(i) for i in input().split()]

v=[int(i) for i in input().split()]



max_velocity = [0]

for i in range(1, n):

    max_velocity_ = min(v[i-1], v[i], max_velocity[i-1] + t[i-1], sum(t) - sum(t[:i]))

    max_velocity.append(max_velocity_)

max_velocity.append(0)



ok = 0

while ok==0:

    for i in range(n-1):

        if  abs((max_velocity[i+1]-max_velocity[i])/t[i]) >1:

                max_velocity[i]=max_velocity[i]-1

                break

    else:

        ok=1







ans = 0

for i in range(n):

    ans += calc_area(max_velocity[i+1], max_velocity[i], v[i], t[i])

print(ans)
#区間ごとの面積を計算する

def calc_area(v_end, v_start, v_max, dt):

    kouten_v = (v_end + v_start + dt) / 2

    kouten_t = kouten_v - v_start

    if 0 < kouten_t < dt:

        area = (v_start + kouten_v) * kouten_t / 2 #左側

        area +=  (v_end + kouten_v) * (dt - kouten_t) / 2 #右側

        area -=  max(0, (kouten_v - v_max))** 2 #上の三角形

    else:

        area = (v_start + v_end) *  dt / 2

    return area



def main():

    #与えられた入力を受け取る

    n=int(eval(input()))

    t=[int(i) for i in input().split()]

    v=[int(i) for i in input().split()]



    #各区間の許容最大速度を計算する

    #（この段階では傾きが-1未満になる可能性がある）

    max_velocity = [0]

    for i in range(1, n):

        max_velocity_ = min(v[i-1], v[i], max_velocity[i-1] + t[i-1])

        max_velocity.append(max_velocity_)

    max_velocity.append(0)



    #後ろから走査して、傾きが-1未満を満たすように許容速度をfittingする

    for i in range(n-1):

        if  max_velocity[-(i+1)] - max_velocity[-(i+2)] < -t[-(i+1)]:

            max_velocity[-(i+2)] = max_velocity[-(i+1)] + t[-(i+1)]



    #各区間の面積を計算して足し合わせる

    ans = 0

    for i in range(n):

        ans += calc_area(max_velocity[i+1], max_velocity[i], v[i], t[i])

    print(ans)



main()
def calc_area(v_end, v_start, v_max, dt):
    kouten_v = (v_end + v_start + dt) / 2
    kouten_t = kouten_v - v_start
    kouten_t_limit1 = max(v_max - v_start, 0)
    kouten_t_limit2 = min(v_end + dt - v_max, dt)
    if 0 < kouten_t < dt:
        area = (v_start + kouten_v) * kouten_t / 2
        area += (v_end + kouten_v) * (dt - kouten_t) / 2
        area -= (kouten_t_limit2 - kouten_t_limit1) * max(0, (kouten_v - v_max)) / 2
    else:
        area = (v_start + v_end) * dt / 2
    return area


n = int(eval(input()))
t = [int(i) for i in input().split()]
v = [int(i) for i in input().split()]
max_velocity = [0]
for i in range(1, n):
    max_velocity_ = min(
        v[i - 1], v[i], max_velocity[i - 1] + t[i - 1], sum(t) - sum(t[:i])
    )
    max_velocity.append(max_velocity_)
max_velocity.append(0)
ok = 0
while ok == 0:
    for i in range(n - 1):
        if abs((max_velocity[i + 1] - max_velocity[i]) / t[i]) > 1:
            max_velocity[i] = max_velocity[i] - 1
            break
    else:
        ok = 1
ans = 0
for i in range(n):
    ans += calc_area(max_velocity[i + 1], max_velocity[i], v[i], t[i])
print(ans)

# 区間ごとの面積を計算する
def calc_area(v_end, v_start, v_max, dt):
    kouten_v = (v_end + v_start + dt) / 2
    kouten_t = kouten_v - v_start
    if 0 < kouten_t < dt:
        area = (v_start + kouten_v) * kouten_t / 2  # 左側
        area += (v_end + kouten_v) * (dt - kouten_t) / 2  # 右側
        area -= max(0, (kouten_v - v_max)) ** 2  # 上の三角形
    else:
        area = (v_start + v_end) * dt / 2
    return area


def main():
    # 与えられた入力を受け取る
    n = int(eval(input()))
    t = [int(i) for i in input().split()]
    v = [int(i) for i in input().split()]
    # 各区間の許容最大速度を計算する
    # （この段階では傾きが-1未満になる可能性がある）
    max_velocity = [0]
    for i in range(1, n):
        max_velocity_ = min(v[i - 1], v[i], max_velocity[i - 1] + t[i - 1])
        max_velocity.append(max_velocity_)
    max_velocity.append(0)
    # 後ろから走査して、傾きが-1未満を満たすように許容速度をfittingする
    for i in range(n - 1):
        if max_velocity[-(i + 1)] - max_velocity[-(i + 2)] < -t[-(i + 1)]:
            max_velocity[-(i + 2)] = max_velocity[-(i + 1)] + t[-(i + 1)]
    # 各区間の面積を計算して足し合わせる
    ans = 0
    for i in range(n):
        ans += calc_area(max_velocity[i + 1], max_velocity[i], v[i], t[i])
    print(ans)


main()

+# 区間ごとの面積を計算する -    kouten_t_limit1 = max(v_max - v_start, 0) -    kouten_t_limit2 = min(v_end + dt - v_max, dt) -        area = (v_start + kouten_v) * kouten_t / 2 -        area += (v_end + kouten_v) * (dt - kouten_t) / 2 -        area -= (kouten_t_limit2 - kouten_t_limit1) * max(0, (kouten_v - v_max)) / 2 +        area = (v_start + kouten_v) * kouten_t / 2  # 左側 +        area += (v_end + kouten_v) * (dt - kouten_t) / 2  # 右側 +        area -= max(0, (kouten_v - v_max)) ** 2  # 上の三角形 -n = int(eval(input())) -t = [int(i) for i in input().split()] -v = [int(i) for i in input().split()] -max_velocity = [0] -for i in range(1, n): -    max_velocity_ = min( -        v[i - 1], v[i], max_velocity[i - 1] + t[i - 1], sum(t) - sum(t[:i]) -    ) -    max_velocity.append(max_velocity_) -max_velocity.append(0) -ok = 0 -while ok == 0: +def main(): +    # 与えられた入力を受け取る +    n = int(eval(input())) +    t = [int(i) for i in input().split()] +    v = [int(i) for i in input().split()] +    # 各区間の許容最大速度を計算する +    # （この段階では傾きが-1未満になる可能性がある） +    max_velocity = [0] +    for i in range(1, n): +        max_velocity_ = min(v[i - 1], v[i], max_velocity[i - 1] + t[i - 1]) +        max_velocity.append(max_velocity_) +    max_velocity.append(0) +    # 後ろから走査して、傾きが-1未満を満たすように許容速度をfittingする -        if abs((max_velocity[i + 1] - max_velocity[i]) / t[i]) > 1: -            max_velocity[i] = max_velocity[i] - 1 -            break -    else: -        ok = 1 -ans = 0 -for i in range(n): -    ans += calc_area(max_velocity[i + 1], max_velocity[i], v[i], t[i]) -print(ans) +        if max_velocity[-(i + 1)] - max_velocity[-(i + 2)] < -t[-(i + 1)]: +            max_velocity[-(i + 2)] = max_velocity[-(i + 1)] + t[-(i + 1)] +    # 各区間の面積を計算して足し合わせる +    ans = 0 +    for i in range(n): +        ans += calc_area(max_velocity[i + 1], max_velocity[i], v[i], t[i]) +    print(ans) + + +main()