#!/usr/bin/python

# coding: utf-8



# AtCoder Beginner Contest 076

# D - AtCoder Express



from sys import stdin



# 移動距離を返す

def solve(ts, vs):

  if len(ts) == 0: return 0.0



  time  = sum(ts)  # 総時間

  limit = min(vs)  # 制限速度の下限

  if time / 2.0 <= limit:     # limitまで加速する時間がない

    return (time / 2.0) ** 2  # 半分の時間で加速，残りで減速



  # 制限速度まで達した区間がある

  if limit == 0:

    # その区間を除いて計算

    vzero = [i for i in range(len(vs)) if vs[i] == 0][0]

    return solve(ts[:vzero],     vs[:vzero]) + \

           solve(ts[vzero + 1:], vs[vzero + 1:])



  # 最初に1加速, 最後に1減速

  n = len(ts)

  ts[0]     -= 1

  ts[n - 1] -= 1

  # 長さ0の区間を削除

  if ts[n - 1] == 0:

    ts = ts[:n - 1]

    vs = vs[:n - 1]

  if ts[0] == 0:

    ts = ts[1:]

    vs = vs[1:]

  # 制限時間を1減らす (= 現在速度を1増やす)

  vs = [v - 1 for v in vs]

  # 1加速, 速度1でtime-2秒移動, 1減速, の移動距離

  dist = time - 2 + 1

  return dist + solve(ts, vs)



# 文字列をintのリストに分解する

def splitToInt(line):

  words = line.strip().split()

  return [int(w) for w in words]



N = int(stdin.readline())

ts = splitToInt(stdin.readline())

vs = splitToInt(stdin.readline())

if len(ts) != N or len(vs) != N: raise

print(solve(ts, vs))

#!/usr/bin/python

# coding: utf-8



# AtCoder Beginner Contest 076

# D - AtCoder Express



from sys import stdin



# 移動距離を返す

def solve(ts, vs):

  if len(ts) == 0: return 0.0



  time  = sum(ts)  # 総時間

  limit = min(vs)  # 制限速度の下限

  if time / 2.0 <= limit:     # limitまで加速する時間がない

    return (time / 2.0) ** 2  # 半分の時間で加速，残りで減速



  # 制限速度まで達した区間がある

  if limit == 0:

    # その区間を除いて計算

    vzero = [i for i in range(len(vs)) if vs[i] == 0][0]

    return solve(ts[:vzero],     vs[:vzero]) + \

           solve(ts[vzero + 1:], vs[vzero + 1:])



  # 最初に1加速, 最後に1減速

  ts[0]  -= 1

  ts[-1] -= 1

  # 長さ0の区間を削除

  if ts[-1] == 0:

    ts = ts[:-1]

    vs = vs[:-1]

  if ts[0] == 0:

    ts = ts[1:]

    vs = vs[1:]

  # 制限時間を1減らす (= 現在速度を1増やす)

  vs = [v - 1 for v in vs]

  # 1加速, 速度1でtime-2秒移動, 1減速, の移動距離

  dist = time - 2 + 1

  return dist + solve(ts, vs)



# 文字列をintのリストに分解する

def splitToInt(line):

  words = line.strip().split()

  return [int(w) for w in words]



N = int(stdin.readline())

ts = splitToInt(stdin.readline())

vs = splitToInt(stdin.readline())

if len(ts) != N or len(vs) != N: raise

print(solve(ts, vs))

#!/usr/bin/python
# coding: utf-8
# AtCoder Beginner Contest 076
# D - AtCoder Express
from sys import stdin

# 移動距離を返す
def solve(ts, vs):
    if len(ts) == 0:
        return 0.0
    time = sum(ts)  # 総時間
    limit = min(vs)  # 制限速度の下限
    if time / 2.0 <= limit:  # limitまで加速する時間がない
        return (time / 2.0) ** 2  # 半分の時間で加速，残りで減速
    # 制限速度まで達した区間がある
    if limit == 0:
        # その区間を除いて計算
        vzero = [i for i in range(len(vs)) if vs[i] == 0][0]
        return solve(ts[:vzero], vs[:vzero]) + solve(ts[vzero + 1 :], vs[vzero + 1 :])
    # 最初に1加速, 最後に1減速
    n = len(ts)
    ts[0] -= 1
    ts[n - 1] -= 1
    # 長さ0の区間を削除
    if ts[n - 1] == 0:
        ts = ts[: n - 1]
        vs = vs[: n - 1]
    if ts[0] == 0:
        ts = ts[1:]
        vs = vs[1:]
    # 制限時間を1減らす (= 現在速度を1増やす)
    vs = [v - 1 for v in vs]
    # 1加速, 速度1でtime-2秒移動, 1減速, の移動距離
    dist = time - 2 + 1
    return dist + solve(ts, vs)


# 文字列をintのリストに分解する
def splitToInt(line):
    words = line.strip().split()
    return [int(w) for w in words]


N = int(stdin.readline())
ts = splitToInt(stdin.readline())
vs = splitToInt(stdin.readline())
if len(ts) != N or len(vs) != N:
    raise
print(solve(ts, vs))

#!/usr/bin/python
# coding: utf-8
# AtCoder Beginner Contest 076
# D - AtCoder Express
from sys import stdin

# 移動距離を返す
def solve(ts, vs):
    if len(ts) == 0:
        return 0.0
    time = sum(ts)  # 総時間
    limit = min(vs)  # 制限速度の下限
    if time / 2.0 <= limit:  # limitまで加速する時間がない
        return (time / 2.0) ** 2  # 半分の時間で加速，残りで減速
    # 制限速度まで達した区間がある
    if limit == 0:
        # その区間を除いて計算
        vzero = [i for i in range(len(vs)) if vs[i] == 0][0]
        return solve(ts[:vzero], vs[:vzero]) + solve(ts[vzero + 1 :], vs[vzero + 1 :])
    # 最初に1加速, 最後に1減速
    ts[0] -= 1
    ts[-1] -= 1
    # 長さ0の区間を削除
    if ts[-1] == 0:
        ts = ts[:-1]
        vs = vs[:-1]
    if ts[0] == 0:
        ts = ts[1:]
        vs = vs[1:]
    # 制限時間を1減らす (= 現在速度を1増やす)
    vs = [v - 1 for v in vs]
    # 1加速, 速度1でtime-2秒移動, 1減速, の移動距離
    dist = time - 2 + 1
    return dist + solve(ts, vs)


# 文字列をintのリストに分解する
def splitToInt(line):
    words = line.strip().split()
    return [int(w) for w in words]


N = int(stdin.readline())
ts = splitToInt(stdin.readline())
vs = splitToInt(stdin.readline())
if len(ts) != N or len(vs) != N:
    raise
print(solve(ts, vs))

-    n = len(ts) -    ts[n - 1] -= 1 +    ts[-1] -= 1 -    if ts[n - 1] == 0: -        ts = ts[: n - 1] -        vs = vs[: n - 1] +    if ts[-1] == 0: +        ts = ts[:-1] +        vs = vs[:-1]