1. 問題
2. コード
ルールとクエリは、ドットリストで記録して、ベクタでまとめました。
(defun collect-day (trash day rules)
(declare (type fixnum trash day)
(type (simple-array cons (*))))
(let* ((rule (aref rules (1- trash)))
(qi (car rule))
(ri (cdr rule)))
(multiple-value-bind (q r) (floor day qi)
(cond ((<= r ri) (+ ri (* qi q)))
(t (+ ri (* qi (1+ q))))))))
(defun read-pairs (n)
(let* ((vec (make-array n :element-type 'cons)))
(loop for i from 0 below n
do (setf (aref vec i)
(cons (read) (read)))
finally (return vec))))
(defun main ()
(let* ((n (read))
(rules (read-pairs n))
(q (read))
(queries (read-pairs q)))
(loop for query across queries
do (print (collect-day (car query)
(cdr query) rules)))))
#-swank(main)
Code language: Lisp (lisp)
