結果
| 問題 |
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)