提出 #5192029
ソースコード 拡げる
;; -*- coding: utf-8 -*- (eval-when (:compile-toplevel :load-toplevel :execute) (defparameter OPT #+swank '(optimize (speed 3) (safety 2)) #-swank '(optimize (speed 3) (safety 0) (debug 0))) #+swank (progn (ql:quickload '(:cl-debug-print :fiveam)) (shadow :run) (use-package :fiveam))) #+swank (cl-syntax:use-syntax cl-debug-print:debug-print-syntax) ;; BEGIN_INSERTED_CONTENTS (declaim (inline gemm)) (defun gemm (a b &key (op+ #'+) (op* #'*) (identity+ 0)) (declare ((simple-array * (* *)) a b) (function op+ op*)) (let ((c (make-array (list (the uint32 (array-dimension a 0)) (the uint32 (array-dimension b 1))) :element-type 'uint32))) (dotimes (col (array-dimension a 0)) (dotimes (row (array-dimension b 1)) (let ((res identity+)) (dotimes (k (array-dimension a 1)) (setf res (funcall op+ res (funcall op* (aref a col k) (aref b k row))))) (setf (aref c col row) res)))) c)) (declaim (inline generalized-power)) (defun generalized-power (base power op identity) (declare ((integer 0 #.most-positive-fixnum) power) (function op)) (labels ((recur (x p) (declare ((integer 0 #.most-positive-fixnum) p)) (cond ((zerop p) identity) ((evenp p) (recur (funcall op x x) (ash p -1))) (t (funcall op x (recur x (- p 1))))))) (recur base power))) (defstruct (queue (:constructor make-queue (&optional list &aux (tail (last list))))) (list nil :type list) (tail nil :type (or null (cons t null)))) (declaim (inline enqueue)) (defun enqueue (obj queue) (symbol-macrolet ((list (queue-list queue)) (tail (queue-tail queue))) (if (null list) (setf tail (list obj) list tail) (setf (cdr tail) (list obj) tail (cdr tail)))) queue) (declaim (inline dequeue)) (defun dequeue (queue) (pop (queue-list queue))) (defmacro dbg (&rest forms) #+swank (if (= (length forms) 1) `(format *error-output* "~A => ~A~%" ',(car forms) ,(car forms)) `(format *error-output* "~A => ~A~%" ',forms `(,,@forms))) #-swank (declare (ignore forms))) (defmacro define-int-types (&rest bits) `(progn ,@(mapcar (lambda (b) `(deftype ,(intern (format nil "UINT~A" b)) () '(unsigned-byte ,b))) bits) ,@(mapcar (lambda (b) `(deftype ,(intern (format nil "INT~A" b)) () '(signed-byte ,b))) bits))) (define-int-types 2 4 7 8 15 16 31 32 62 63 64) (declaim (inline println)) (defun println (obj &optional (stream *standard-output*)) (let ((*read-default-float-format* 'double-float)) (prog1 (princ obj stream) (terpri stream)))) (defconstant +mod+ 1000000007) ;; Body (defun main () (declare #.OPT) (let* ((n (read)) (a (- (read) 1)) (b (- (read) 1)) (m (read)) (adja (make-array (list n n) :element-type 'uint32 :initial-element 0)) ;; dist . city (q (make-queue)) (marked (make-array n :element-type 'bit :initial-element 0)) (iden (make-array (list n n) :element-type 'uint32 :initial-element 0))) (declare (uint8 n a b m)) (dotimes (i n) (setf (aref iden i i) 1)) (dotimes (_ m) (let ((x (- (read) 1)) (y (- (read) 1))) (setf (aref adja x y) 1 (aref adja y x) 1))) (enqueue (cons 0 a) q) (let* ((mindist (loop for (dist . city) of-type (uint8 . uint8) = (dequeue q) until (= city b) do (loop for j below n when (and (= 1 (aref adja city j)) (zerop (aref marked j))) do (setf (aref marked j) 1) (enqueue (cons (+ 1 dist) j) q)) finally (return dist))) (mat (generalized-power adja mindist (lambda (m1 m2) (declare ((simple-array uint32 (* *)) m1 m2)) (gemm m1 m2 :op+ (lambda (x y) (declare (uint32 x y)) (mod (+ x y) +mod+)) :op* (lambda (x y) (declare (uint32 x y)) (mod (* x y) +mod+)))) iden))) (println (aref mat a b))))) #-swank(main)
提出情報
提出日時 | |
---|---|
問題 | C - 正直者の高橋くん |
ユーザ | sansaqua |
言語 | Common Lisp (SBCL 1.1.14) |
得点 | 100 |
コード長 | 4885 Byte |
結果 | AC |
実行時間 | 138 ms |
メモリ | 19048 KiB |
ジャッジ結果
セット名 | Sample | All | ||||
---|---|---|---|---|---|---|
得点 / 配点 | 0 / 0 | 100 / 100 | ||||
結果 |
|
|
セット名 | テストケース |
---|---|
Sample | subtask0_sample_01.txt, subtask0_sample_02.txt |
All | subtask0_sample_01.txt, subtask0_sample_02.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_25.txt, subtask1_26.txt, subtask1_27.txt, subtask1_28.txt, subtask1_29.txt, subtask1_30.txt |
ケース名 | 結果 | 実行時間 | メモリ |
---|---|---|---|
subtask0_sample_01.txt | AC | 86 ms | 17124 KiB |
subtask0_sample_02.txt | AC | 85 ms | 16996 KiB |
subtask1_01.txt | AC | 138 ms | 19048 KiB |
subtask1_02.txt | AC | 138 ms | 19044 KiB |
subtask1_03.txt | AC | 85 ms | 16996 KiB |
subtask1_04.txt | AC | 128 ms | 19044 KiB |
subtask1_05.txt | AC | 128 ms | 19044 KiB |
subtask1_06.txt | AC | 85 ms | 16992 KiB |
subtask1_07.txt | AC | 86 ms | 16996 KiB |
subtask1_08.txt | AC | 87 ms | 16996 KiB |
subtask1_09.txt | AC | 88 ms | 16996 KiB |
subtask1_10.txt | AC | 87 ms | 16992 KiB |
subtask1_11.txt | AC | 112 ms | 19044 KiB |
subtask1_12.txt | AC | 123 ms | 19040 KiB |
subtask1_13.txt | AC | 123 ms | 19044 KiB |
subtask1_14.txt | AC | 123 ms | 19044 KiB |
subtask1_15.txt | AC | 128 ms | 19048 KiB |
subtask1_16.txt | AC | 106 ms | 16996 KiB |
subtask1_17.txt | AC | 106 ms | 16996 KiB |
subtask1_18.txt | AC | 106 ms | 16996 KiB |
subtask1_19.txt | AC | 96 ms | 17000 KiB |
subtask1_20.txt | AC | 102 ms | 19048 KiB |
subtask1_21.txt | AC | 102 ms | 19048 KiB |
subtask1_22.txt | AC | 102 ms | 16996 KiB |
subtask1_23.txt | AC | 106 ms | 16992 KiB |
subtask1_24.txt | AC | 112 ms | 16996 KiB |
subtask1_25.txt | AC | 116 ms | 19044 KiB |
subtask1_26.txt | AC | 111 ms | 16996 KiB |
subtask1_27.txt | AC | 117 ms | 19044 KiB |
subtask1_28.txt | AC | 96 ms | 16992 KiB |
subtask1_29.txt | AC | 86 ms | 16996 KiB |
subtask1_30.txt | AC | 85 ms | 16992 KiB |