結果

問題 No.58 イカサマなサイコロ
コンテスト
ユーザー Common Lisp
提出日時 2024-11-15 15:07:04
言語 Common Lisp
(sbcl 2.6.7)
コンパイル:
sbclc _filename_
実行:
sbcl --script Main.fasl
結果
AC  
実行時間 7 ms / 5,000 ms
+ 99µs
コード長 1,174 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 190 ms
コンパイル使用メモリ 42,960 KB
実行使用メモリ 29,680 KB
最終ジャッジ日時 2026-09-23 07:24:08
合計ジャッジ時間 1,695 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 10
権限があれば一括ダウンロードができます
コンパイルメッセージ
; compiling file "/home/judge/data/code/Main.lisp" (written 23 SEP 2026 07:24:05 AM):

; wrote /home/judge/data/code/Main.fasl
; compilation finished in 0:00:00.015

ソースコード

diff #
raw source code

(defun main (&rest argv)
  (declare (ignorable argv))
  (let* ((*read-default-float-format* 'double-float)
         (n (read))
         (k (read))
         (dp1 (make-array (list 100 100) :element-type 'double-float :initial-element 0d0))
         (dp2 (make-array (list 100 100) :element-type 'double-float :initial-element 0d0))
         (res 0d0))
    (setf (aref dp1 0 0) 1d0
          (aref dp2 0 0) 1d0)
    (loop for i from 0 below n do
          (loop for j from 0 to (* 6 n) do
                (loop for k from 1 to 6 do
                      (incf (aref dp1 (1+ i) (+ j k)) (/ (aref dp1 i j) 6)))))
    (loop for i from 0 below n do
          (loop for j from 0 to (* 6 n)
                if (< i (- n k))
                  do (loop for k from 1 to 6 do
                           (incf (aref dp2 (1+ i) (+ j k)) (/ (aref dp2 i j) 6)))
                else
                  do (loop for k from 4 to 6 do
                           (incf (aref dp2 (1+ i) (+ j k)) (/ (aref dp2 i j) 3)))))
    (loop for i from 0 to (* 6 n) do
          (loop for j from 0 below i do
                (incf res (* (aref dp1 n j) (aref dp2 n i)))))
    (format t "~f~%" res)))

(main)
0