Submission #7475989


Source Code Expand

;; -*- coding: utf-8 -*-
(eval-when (:compile-toplevel :load-toplevel :execute)
  (sb-int:defconstant-eqx OPT
    #+swank '(optimize (speed 3) (safety 2))
    #-swank '(optimize (speed 3) (safety 0) (debug 0))
    #'equal)
  #+swank (ql:quickload '(:cl-debug-print :fiveam) :silent t)
  #-swank (set-dispatch-macro-character
           #\# #\> (lambda (s c p) (declare (ignore c p)) (read s nil nil t))))
#+swank (cl-syntax:use-syntax cl-debug-print:debug-print-syntax)
#-swank (disable-debugger) ; for CS Academy

;; BEGIN_INSERTED_CONTENTS
(declaim (inline read-schar))
(defun read-schar (&optional (stream *standard-input*))
  (declare #-swank (sb-kernel:ansi-stream stream)
           (inline read-byte))
  #+swank (read-char stream nil #\Newline) ; on SLIME
  #-swank (code-char (read-byte stream nil #.(char-code #\Newline))))

(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)
  "Pushes OBJ to the end of 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)
  "Removes and returns the element at the front of QUEUE. Returns NIL if QUEUE
is empty."
  (pop (queue-list queue)))

(declaim (inline queue-empty-p))
(defun queue-empty-p (queue)
  (null (queue-list queue)))

(declaim (inline enqueue-front))
(defun enqueue-front (obj queue)
  "Pushes OBJ to the front of 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 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* ((h (read))
         (w (read))
         (k (read))
         (q (make-queue))
         (dists (make-array (list (+ h 2) (+ w 2)) :element-type 'uint32 :initial-element 0)))
    (declare (uint16 h w k))
    (dotimes (i (+ h 2))
      (enqueue (cons i 0) q)
      (enqueue (cons i (+ w 1)) q))
    (dotimes (j (+ w 2))
      (enqueue (cons 0 j) q)
      (enqueue (cons (+ h 1) j) q))
    (dotimes (i h)
      (dotimes (j w)
        (let ((c (read-schar)))
          (if (char= #\x c)
              (enqueue (cons (+ i 1) (+ j 1)) q)
              (setf (aref dists (+ i 1) (+ j 1)) #xffffffff))))
      (read-schar))
    (labels ((visit (i j new-dist)
               (when (and (<= 0 i (+ h 1))
                          (<= 0 j (+ w 1))
                          (= (aref dists i j) #xffffffff))
                 (enqueue (cons i j) q)
                 (setf (aref dists i j) new-dist))))
      (loop until (queue-empty-p q)
            for (i . j) of-type (uint32 . uint32) = (dequeue q)
            for d = (aref dists i j)
            do (visit (- i 1) j (+ d 1))
               (visit (+ i 1) j (+ d 1))
               (visit i (- j 1) (+ d 1))
               (visit i (+ j 1) (+ d 1)))
      (println (loop for d across (array-storage-vector dists)
                     count (>= d k))))))

#-swank (main)

Submission Info

Submission Time
Task C - 菱型カウント
User sansaqua
Language Common Lisp (SBCL 1.1.14)
Score 100
Code Size 4166 Byte
Status AC
Exec Time 245 ms
Memory 29668 KiB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 3
AC × 23
AC × 43
Set Name Test Cases
Sample subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.txt
Subtask1 subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.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
Subtask2 subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.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, subtask2-01.txt, subtask2-02.txt, subtask2-03.txt, subtask2-04.txt, subtask2-05.txt, subtask2-06.txt, subtask2-07.txt, subtask2-08.txt, subtask2-09.txt, subtask2-10.txt, subtask2-11.txt, subtask2-12.txt, subtask2-13.txt, subtask2-14.txt, subtask2-15.txt, subtask2-16.txt, subtask2-17.txt, subtask2-18.txt, subtask2-19.txt, subtask2-20.txt
Case Name Status Exec Time Memory
subtask0-sample01.txt AC 245 ms 29668 KiB
subtask0-sample02.txt AC 77 ms 16996 KiB
subtask0-sample03.txt AC 78 ms 16996 KiB
subtask1-01.txt AC 76 ms 16996 KiB
subtask1-02.txt AC 76 ms 16996 KiB
subtask1-03.txt AC 77 ms 17000 KiB
subtask1-04.txt AC 77 ms 16992 KiB
subtask1-05.txt AC 76 ms 16996 KiB
subtask1-06.txt AC 78 ms 16992 KiB
subtask1-07.txt AC 77 ms 16992 KiB
subtask1-08.txt AC 76 ms 16996 KiB
subtask1-09.txt AC 77 ms 16996 KiB
subtask1-10.txt AC 77 ms 16996 KiB
subtask1-11.txt AC 76 ms 16996 KiB
subtask1-12.txt AC 76 ms 16996 KiB
subtask1-13.txt AC 76 ms 16996 KiB
subtask1-14.txt AC 76 ms 16996 KiB
subtask1-15.txt AC 76 ms 17000 KiB
subtask1-16.txt AC 76 ms 16992 KiB
subtask1-17.txt AC 77 ms 16992 KiB
subtask1-18.txt AC 77 ms 17000 KiB
subtask1-19.txt AC 76 ms 16996 KiB
subtask1-20.txt AC 77 ms 17000 KiB
subtask2-01.txt AC 81 ms 19044 KiB
subtask2-02.txt AC 81 ms 19040 KiB
subtask2-03.txt AC 76 ms 16996 KiB
subtask2-04.txt AC 82 ms 19040 KiB
subtask2-05.txt AC 90 ms 25184 KiB
subtask2-06.txt AC 91 ms 25184 KiB
subtask2-07.txt AC 93 ms 25192 KiB
subtask2-08.txt AC 91 ms 25188 KiB
subtask2-09.txt AC 92 ms 25184 KiB
subtask2-10.txt AC 93 ms 25188 KiB
subtask2-11.txt AC 92 ms 25184 KiB
subtask2-12.txt AC 92 ms 25188 KiB
subtask2-13.txt AC 91 ms 25192 KiB
subtask2-14.txt AC 92 ms 25188 KiB
subtask2-15.txt AC 91 ms 25188 KiB
subtask2-16.txt AC 93 ms 25188 KiB
subtask2-17.txt AC 92 ms 25192 KiB
subtask2-18.txt AC 91 ms 25188 KiB
subtask2-19.txt AC 93 ms 25184 KiB
subtask2-20.txt AC 91 ms 25188 KiB