【AtCoder】
AtCoder Daily Training EASY 2026
/04/24 18:00start
(Common Lisp)

関連記事

「有罪」の条件を、andで評価しました。

(defun guilty-p (a b c d)
  (and (>= c a) (< d b)))

(defun main ()
  (let* ((a (read))
	 (b (read))
	 (c (read))
	 (d (read)))
    (format t "~a" (if (guilty-p a b c d)
		       "Yes" "No"))))
#-swank
(main)Code language: Lisp (lisp)
1. A – Candy Cookie Law

2. B – A Substring

subseqは、sequence の start+1 から end までの部分列を取るので、end に後ろからの数を与えました。

(defun substring (str a b)
  (subseq str a (- (length str) b)))

(defun main ()
  (let* ((n (read))
	 (a (read))
	 (b (read))
	 (str (read-line)))
    (declare (ignore n))
    (princ (substring str a b))))

#-swank
(main)
Code language: Lisp (lisp)
2. B – A Substring

3. C – Garbage Collection

ルールとクエリは、ドットリストで記録して、ベクタでまとめました。

(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)
3. C – Garbage Collection