fn solve(time distance : real) : int [ var disc := time * time - distance * 4; if disc < 0 then [ return 0; ] else [ var first_root := ceil(next_number((time - sqrt(disc)) / 2)); var second_root := floor(prev_number((time + sqrt(disc)) / 2)); var result := second_root - first_root + 1; result := max(result, 0); return result; ] ] fn main [ var lines := list_break_to_lines(read_lazy(h[0])); var t := list_break_whitespace(lines[0])[1 .. ]; var times := map(t, ston); var d := list_break_whitespace(lines[1])[1 .. ]; var distances := map(d, ston); var mult := 1; for i in list_iterator(times) do mult *= solve(times[i], distances[i]); write(h[1], ntos(mult) + nl); ]