Lisp Passing Cars
(defun passing-cars (a)
  (let ((passing-cars 0)
        (multiply 0))
    (dolist (i a)
      (if (zerop i)
          (incf multiply)
          (when (> multiply 0)
            (incf passing-cars multiply)
            (when (> passing-cars 1000000000)
              (return-from passing-cars -1)))))
    passing-cars))

This counts eastbound cars as it scans, then adds them whenever a westbound car appears.