結果
問題 |
No.2792 Security Cameras on Young Diagram
|
ユーザー |
|
提出日時 | 2024-06-22 17:35:32 |
言語 | Common Lisp (sbcl 2.5.0) |
結果 |
AC
|
実行時間 | 77 ms / 2,000 ms |
コード長 | 1,367 bytes |
コンパイル時間 | 960 ms |
コンパイル使用メモリ | 30,720 KB |
実行使用メモリ | 27,264 KB |
最終ジャッジ日時 | 2024-06-24 18:48:43 |
合計ジャッジ時間 | 2,260 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
コンパイルメッセージ
; compiling file "/home/judge/data/code/Main.lisp" (written 24 JUN 2024 06:48:40 PM): ; wrote /home/judge/data/code/Main.fasl ; compilation finished in 0:00:00.038
ソースコード
(defun mod-inverse (a m) (let ((m0 m) (y 0) (x 1)) (if (= m 1) 0 (progn (loop while (> a 1) do (let ((q (floor a m)) (temp m)) (setf m (mod a m) a temp) (setf temp y y (- x (* q y)) x temp))) (if (< x 0) (+ x m0) x))))) (defun comb-lut (N MOD) (let ((F (make-array (1+ N) :initial-element 1)) (InvF (make-array (1+ N) :initial-element 1))) (loop for i from 1 to N do (setf (aref F i) (mod (* (aref F (1- i)) i) MOD))) (setf (aref InvF N) (mod-inverse (aref F N) MOD)) (loop for i from (1- N) downto 0 do (setf (aref InvF i) (mod (* (aref InvF (1+ i)) (1+ i)) MOD))) (lambda (n r) (assert (and (<= 0 n N) (<= 0 r))) (if (<= 0 r n) (mod (* (mod (* (aref F n) (aref InvF r)) MOD) (aref InvF (- n r))) MOD) 0)))) (defun main () (let* ((MOD 998244353) (N (read)) (A (loop for i from 1 to N collect (read))) (comb (comb-lut (+ N (apply #'max A)) MOD)) (ans 1)) (loop for q from 1 to N for a in A do (setf ans (mod (+ ans (funcall comb (+ q a -1) q)) MOD))) (princ ans)(terpri))) (main)