1. D – Trick Taking
1巡のループで、TとC1の2つの色の最大値とその人を探します。
;; (winner 4 2 '(1 2 1 2) '(6 3 4 5)) ;=> 4
(defun winner-of-trick-taking (N TT Cn Rn)
(loop for i from 1 to N
for Ci in Cn
for Ri in Rn
with C1 = (first Cn)
with max_t = 0
with max_c1 = 0
with no1_t = nil
with no1_c1 = nil
when (and (= Ci TT) (> Ri max_t))
do (setf max_t Ri
no1_t i)
when (and (= Ci C1) (> Ri max_c1))
do (setf max_c1 Ri
no1_c1 i)
finally (return (if no1_t no1_t no1_c1))))
(defun read-nums (N)
(loop repeat N collect (read)))
(defun main ()
(let* ((N (read))
(TT (read))
(Cn (read-nums N))
(Rn (read-nums N)))
(princ (winner-of-trick-taking N TT Cn Rn))))
#-swank(main)Code language: Lisp (lisp)

2. E – Even Digits(TLE 7)
まずは、素朴に解いてみました。
;; (good-integer-p 2405) ;=> NIL
(defun good-integer-p (n)
(loop for x = n then (floor x 10)
for digit = (mod x 10)
while (> x 0)
always (evenp digit)))
;; (nth-good-integer 133) ;-> 2024
(defun nth-good-integer (nth)
(loop for n from 0 by 2
with cnt = 0
when (good-integer-p n)
do (incf cnt)
until (= cnt nth)
finally (return n)))
(defun main ()
(let ((n (read)))
(princ (nth-good-integer n))))
#-swank(main)Code language: Lisp (lisp)

2.1. 5進数の2倍
この「よい数」は、偶数の5つの数字しか使えないので、実質 5 進数ということになります。
そこで、nを5進数にして2倍にすることにしました。
(defun ary-number-list (n base)
(nreverse
(loop for x = n then (floor x base)
until (zerop x)
collect (mod x base))))
(defun nth-good-integer/ary (nth)
(loop for d in (ary-number-list (1- nth) 5)
with result = 0
do (setf result (+ (* 10 result) (* 2 d)))
finally (return result)))
(defun main/ary ()
(let ((n (read)))
(princ (nth-good-integer/ary n))))
#-swank(main/ary)Code language: PHP (php)

これで、無事にクリアできました。
