提出 #4572433
ソースコード 拡げる
(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
(defmacro buffered-read-line (&optional (buffer-size 30) (in '*standard-input*) (terminate-char #\Space))
"Note that the returned string will be reused."
(let ((buffer (gensym))
(character (gensym))
(idx (gensym)))
`(let ((,buffer (load-time-value (make-string ,buffer-size
:element-type 'base-char))))
(declare (simple-base-string ,buffer)
(inline read-byte))
(loop for ,character of-type base-char =
#-swank (code-char (read-byte ,in nil #.(char-code #\Newline)))
#+swank (read-char ,in nil #\Newline)
for ,idx from 0
until (char= ,character #\Newline)
do (setf (schar ,buffer ,idx) ,character)
finally (when (< ,idx ,buffer-size)
(setf (schar ,buffer ,idx) ,terminate-char))
(return (values ,buffer ,idx))))))
(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)))
(declaim (inline enqueue-front))
(defun enqueue-front (obj queue)
(symbol-macrolet ((list (queue-list queue))
(tail (queue-tail queue)))
(if (null list)
(setf tail (list obj)
list tail)
(push obj list))
queue))
(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 4 7 8 15 16 31 32 62 63 64)
(defmacro println (obj &optional (stream '*standard-output*))
`(let ((*read-default-float-format* 'double-float))
(prog1 (princ ,obj ,stream) (terpri ,stream))))
;; Hauptteil
(defun reachable-p (plan start-i start-j)
"0-1 BFS"
(declare #.OPT
((simple-array base-char (* *)) plan))
(let* ((height (array-dimension plan 0))
(width (array-dimension plan 1))
(height-1 (- height 1))
(width-1 (- width 1))
(queue (make-queue))
(marked (make-array (list height width) :element-type 'bit :initial-element 0)))
(declare (uint16 height width))
(labels ((frob-neighbor (dist i j)
(declare (uint32 dist))
(case (aref plan i j)
(#\#
(enqueue (list (1+ dist) i j) queue)
(setf (aref marked i j) 1))
(#\.
(enqueue-front (list dist i j) queue)
(setf (aref marked i j) 1))
(#\g (return-from reachable-p t)))))
(declare (inline frob-neighbor))
(enqueue (list 0 start-i start-j) queue)
(setf (aref marked start-i start-j) 1)
(loop for vertex = (dequeue queue)
until (null vertex)
for (dist i j) of-type (uint4 uint16 uint16) = vertex
when (<= dist 2)
do (when (and (< 0 i) (zerop (aref marked (- i 1) j)))
(frob-neighbor dist (- i 1) j))
(when (and (< i height-1) (zerop (aref marked (+ i 1) j)))
(frob-neighbor dist (+ i 1) j))
(when (and (< 0 j) (zerop (aref marked i (- j 1))))
(frob-neighbor dist i (- j 1)))
(when (and (< j width-1) (zerop (aref marked i (+ j 1))))
(frob-neighbor dist i (+ j 1)))
finally (return nil)))))
(defun main ()
(declare #.OPT)
(let* ((height (read))
(width (read))
(stadtplan (make-array (list height width) :element-type 'base-char))
start-i start-j)
(dotimes (i height)
(let ((row (buffered-read-line 500)))
(dotimes (j width)
(when (char= #\s (aref row j))
(setf start-i i start-j j))
(setf (aref stadtplan i j) (aref row j)))))
(write-line (if (reachable-p stadtplan start-i start-j)
"YES" "NO"))))
#-swank(main)
提出情報
| 提出日時 | |
|---|---|
| 問題 | C - 器物損壊!高橋君 |
| ユーザ | sansaqua |
| 言語 | Common Lisp (SBCL 1.1.14) |
| 得点 | 100 |
| コード長 | 4963 Byte |
| 結果 | AC |
| 実行時間 | 113 ms |
| メモリ | 35432 KiB |
ジャッジ結果
| セット名 | All | ||
|---|---|---|---|
| 得点 / 配点 | 100 / 100 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| All | 00_min_01.txt, 00_min_02.txt, 00_min_03.txt, 00_min_04.txt, 00_min_05.txt, 00_min_06.txt, 00_min_07.txt, 00_min_08.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 00_sample_05.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 01_rnd_09.txt, 01_rnd_10.txt, 01_rnd_11.txt, 01_rnd_12.txt, 01_rnd_13.txt, 01_rnd_14.txt, 01_rnd_15.txt, 01_rnd_16.txt, 01_rnd_17.txt, 01_rnd_18.txt, 01_rnd_19.txt, 02_rndhard_00.txt, 02_rndhard_01.txt, 02_rndhard_02.txt, 02_rndhard_03.txt, 02_rndhard_04.txt, 02_rndhard_05.txt, 02_rndhard_06.txt, 02_rndhard_07.txt, 02_rndhard_08.txt, 02_rndhard_09.txt, 02_rndhard_10.txt, 02_rndhard_11.txt, 02_rndhard_12.txt, 02_rndhard_13.txt, 02_rndhard_14.txt, 02_rndhard_15.txt, 02_rndhard_16.txt, 02_rndhard_17.txt, 02_rndhard_18.txt, 02_rndhard_19.txt, 02_rndhard_20.txt, 02_rndhard_21.txt, 02_rndhard_22.txt, 02_rndhard_23.txt, 02_rndhard_24.txt, 02_rndhard_25.txt, 02_rndhard_26.txt, 02_rndhard_27.txt, 02_rndhard_28.txt, 02_rndhard_29.txt, 02_rndhard_30.txt, 02_rndhard_31.txt, 02_rndhard_32.txt, 02_rndhard_33.txt, 02_rndhard_34.txt, 02_rndhard_35.txt, 02_rndhard_36.txt, 02_rndhard_37.txt, 02_rndhard_38.txt, 02_rndhard_39.txt, 03_rndhardsmall_00.txt, 03_rndhardsmall_01.txt, 03_rndhardsmall_02.txt, 03_rndhardsmall_03.txt, 03_rndhardsmall_04.txt, 03_rndhardsmall_05.txt, 03_rndhardsmall_06.txt, 03_rndhardsmall_07.txt, 03_rndhardsmall_08.txt, 03_rndhardsmall_09.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_min_01.txt | AC | 97 ms | 19040 KiB |
| 00_min_02.txt | AC | 97 ms | 19048 KiB |
| 00_min_03.txt | AC | 96 ms | 19044 KiB |
| 00_min_04.txt | AC | 97 ms | 19044 KiB |
| 00_min_05.txt | AC | 97 ms | 19044 KiB |
| 00_min_06.txt | AC | 97 ms | 19044 KiB |
| 00_min_07.txt | AC | 97 ms | 19040 KiB |
| 00_min_08.txt | AC | 97 ms | 19044 KiB |
| 00_sample_01.txt | AC | 97 ms | 19044 KiB |
| 00_sample_02.txt | AC | 97 ms | 19048 KiB |
| 00_sample_03.txt | AC | 97 ms | 19044 KiB |
| 00_sample_04.txt | AC | 97 ms | 19048 KiB |
| 00_sample_05.txt | AC | 97 ms | 19048 KiB |
| 01_rnd_00.txt | AC | 103 ms | 19040 KiB |
| 01_rnd_01.txt | AC | 112 ms | 35432 KiB |
| 01_rnd_02.txt | AC | 107 ms | 25184 KiB |
| 01_rnd_03.txt | AC | 104 ms | 21092 KiB |
| 01_rnd_04.txt | AC | 109 ms | 31336 KiB |
| 01_rnd_05.txt | AC | 103 ms | 19044 KiB |
| 01_rnd_06.txt | AC | 105 ms | 21092 KiB |
| 01_rnd_07.txt | AC | 112 ms | 33380 KiB |
| 01_rnd_08.txt | AC | 103 ms | 19044 KiB |
| 01_rnd_09.txt | AC | 103 ms | 19044 KiB |
| 01_rnd_10.txt | AC | 113 ms | 33376 KiB |
| 01_rnd_11.txt | AC | 103 ms | 19044 KiB |
| 01_rnd_12.txt | AC | 106 ms | 25188 KiB |
| 01_rnd_13.txt | AC | 108 ms | 29284 KiB |
| 01_rnd_14.txt | AC | 106 ms | 23140 KiB |
| 01_rnd_15.txt | AC | 106 ms | 23136 KiB |
| 01_rnd_16.txt | AC | 104 ms | 19044 KiB |
| 01_rnd_17.txt | AC | 113 ms | 33380 KiB |
| 01_rnd_18.txt | AC | 103 ms | 19044 KiB |
| 01_rnd_19.txt | AC | 109 ms | 31332 KiB |
| 02_rndhard_00.txt | AC | 105 ms | 21092 KiB |
| 02_rndhard_01.txt | AC | 105 ms | 21088 KiB |
| 02_rndhard_02.txt | AC | 110 ms | 29280 KiB |
| 02_rndhard_03.txt | AC | 111 ms | 29280 KiB |
| 02_rndhard_04.txt | AC | 108 ms | 27236 KiB |
| 02_rndhard_05.txt | AC | 110 ms | 29280 KiB |
| 02_rndhard_06.txt | AC | 108 ms | 25188 KiB |
| 02_rndhard_07.txt | AC | 106 ms | 23136 KiB |
| 02_rndhard_08.txt | AC | 106 ms | 23136 KiB |
| 02_rndhard_09.txt | AC | 106 ms | 23140 KiB |
| 02_rndhard_10.txt | AC | 106 ms | 23140 KiB |
| 02_rndhard_11.txt | AC | 106 ms | 23140 KiB |
| 02_rndhard_12.txt | AC | 105 ms | 21088 KiB |
| 02_rndhard_13.txt | AC | 105 ms | 21088 KiB |
| 02_rndhard_14.txt | AC | 106 ms | 23140 KiB |
| 02_rndhard_15.txt | AC | 109 ms | 23136 KiB |
| 02_rndhard_16.txt | AC | 112 ms | 31332 KiB |
| 02_rndhard_17.txt | AC | 110 ms | 27240 KiB |
| 02_rndhard_18.txt | AC | 106 ms | 23140 KiB |
| 02_rndhard_19.txt | AC | 105 ms | 21092 KiB |
| 02_rndhard_20.txt | AC | 106 ms | 23144 KiB |
| 02_rndhard_21.txt | AC | 106 ms | 23140 KiB |
| 02_rndhard_22.txt | AC | 106 ms | 23136 KiB |
| 02_rndhard_23.txt | AC | 106 ms | 23144 KiB |
| 02_rndhard_24.txt | AC | 108 ms | 27236 KiB |
| 02_rndhard_25.txt | AC | 108 ms | 25184 KiB |
| 02_rndhard_26.txt | AC | 107 ms | 23136 KiB |
| 02_rndhard_27.txt | AC | 105 ms | 21088 KiB |
| 02_rndhard_28.txt | AC | 104 ms | 21096 KiB |
| 02_rndhard_29.txt | AC | 104 ms | 21088 KiB |
| 02_rndhard_30.txt | AC | 103 ms | 19044 KiB |
| 02_rndhard_31.txt | AC | 106 ms | 19040 KiB |
| 02_rndhard_32.txt | AC | 109 ms | 27240 KiB |
| 02_rndhard_33.txt | AC | 107 ms | 25188 KiB |
| 02_rndhard_34.txt | AC | 107 ms | 25188 KiB |
| 02_rndhard_35.txt | AC | 108 ms | 25188 KiB |
| 02_rndhard_36.txt | AC | 106 ms | 23144 KiB |
| 02_rndhard_37.txt | AC | 106 ms | 23136 KiB |
| 02_rndhard_38.txt | AC | 106 ms | 23140 KiB |
| 02_rndhard_39.txt | AC | 107 ms | 23140 KiB |
| 03_rndhardsmall_00.txt | AC | 97 ms | 19044 KiB |
| 03_rndhardsmall_01.txt | AC | 97 ms | 19044 KiB |
| 03_rndhardsmall_02.txt | AC | 98 ms | 19040 KiB |
| 03_rndhardsmall_03.txt | AC | 97 ms | 19048 KiB |
| 03_rndhardsmall_04.txt | AC | 97 ms | 19044 KiB |
| 03_rndhardsmall_05.txt | AC | 97 ms | 19044 KiB |
| 03_rndhardsmall_06.txt | AC | 97 ms | 19044 KiB |
| 03_rndhardsmall_07.txt | AC | 97 ms | 19044 KiB |
| 03_rndhardsmall_08.txt | AC | 97 ms | 19044 KiB |
| 03_rndhardsmall_09.txt | AC | 98 ms | 19044 KiB |