AtCoder Beginner Contest 001

Submission #4021940

Source codeソースコード

(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))
       (loop for ,character of-type base-char =
                #-swank (code-char (read-byte ,in nil #\Newline))
                #+swank (read-char ,in nil #\Newline)
             for ,idx from 0
             until (char= ,character #\Newline)
             do (setf (schar ,buffer ,idx) ,character)
             finally (setf (schar ,buffer ,idx) ,terminate-char)
                     (return (values ,buffer ,idx))))))

(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)

(defmacro println (obj &optional (stream '*standard-output*))
  `(let ((*read-default-float-format* 'double-float))
     (prog1 (princ ,obj ,stream) (terpri ,stream))))

;; Hauptteil

(defconstant +5mpd+ (* 12 24)) ; number of 5 minutes per day

(declaim (inline write-time))
(defun write-time (mpd)
  (multiple-value-bind (quot rem) (floor (* 5 mpd) 60)
    (format t "~2,'0D~2,'0D" quot rem)))

(declaim (inline parse-time))
(defun parse-time (str start round-func)
  (labels ((to-digit (pos) (- (char-code (schar str pos)) 48)))
    (declare (ftype (function * (values (integer 0 9) &optional)) to-digit)
             (inline to-digit))
    (+ (* #.(* 10 12) (to-digit start))
       (* 12 (to-digit (+ start 1)))
       (* 2 (to-digit (+ start 2)))
       (funcall round-func (to-digit (+ start 3)) 5))))

(defun main ()
  (declare #.OPT)
  (let* ((n (read))
         (timeline (make-array (1+ +5mpd+) :element-type 'int16 :initial-element 0)))
    (dotimes (i n)
      (let ((s (buffered-read-line 10)))
        (incf (aref timeline (parse-time s 0 #'floor)) 1)
        (decf (aref timeline (parse-time s 5 #'ceiling)) 1)))
    (loop for i from 1 below (length timeline)
          do (incf (aref timeline i) (aref timeline (- i 1))))
    (labels ((rec1 (prev-end)
               (loop for i from prev-end below (length timeline)
                     when (< 0 (aref timeline i))
                     do (write-time i)
                        (write-char #\-)
                        (rec2 i)
                     finally (return-from main)))
             (rec2 (src)
               (loop for i from src below (length timeline)
                     when (zerop (aref timeline i))
                     do (write-time i)
                        (terpri)
                        (rec1 i)
                     finally (return-from main))))
      (rec1 0))))

#-swank(main)

Submission

Task問題 D - 感雨時刻の整理
User nameユーザ名 sansaqua
Created time投稿日時
Language言語 Common Lisp (SBCL 1.1.14)
Status状態 AC
Score得点 100
Source lengthソースコード長 3503 Byte
File nameファイル名
Exec time実行時間 311 ms
Memory usageメモリ使用量 28516 KB

Test case

Set

Set name Score得点 / Max score Cases
all 100 / 100 00_sample_01.txt,00_sample_02.txt,00_sample_03.txt,cho_cho_chokudai.txt,chokudai_ga_cho.txt,test_01.txt,test_02.txt,test_03.txt,test_04.txt,test_05.txt,test_06.txt,test_07.txt,test_08.txt,test_09.txt,test_10.txt,test_11.txt,test_12.txt,test_13.txt,test_14.txt,test_15.txt,test_16.txt,test_17.txt,test_18.txt,test_19.txt,test_20.txt,test_21.txt,test_22.txt,test_23.txt,test_24.txt,test_25.txt,test_26.txt,test_27.txt,test_28.txt,test_29.txt,test_30.txt,test_31.txt,test_32.txt,test_33.txt,test_34.txt,test_35.txt,test_36.txt,test_37.txt,test_38.txt,test_39.txt,test_40.txt,test_41.txt,test_42.txt,test_43.txt

Test case

Case name Status状態 Exec time実行時間 Memory usageメモリ使用量
00_sample_01.txt AC 311 ms 28516 KB
00_sample_02.txt AC 86 ms 16868 KB
00_sample_03.txt AC 85 ms 16864 KB
cho_cho_chokudai.txt AC 94 ms 16868 KB
chokudai_ga_cho.txt AC 97 ms 16864 KB
test_01.txt AC 86 ms 16868 KB
test_02.txt AC 86 ms 16868 KB
test_03.txt AC 86 ms 16872 KB
test_04.txt AC 86 ms 16864 KB
test_05.txt AC 86 ms 16868 KB
test_06.txt AC 85 ms 16868 KB
test_07.txt AC 85 ms 16864 KB
test_08.txt AC 85 ms 16872 KB
test_09.txt AC 85 ms 16864 KB
test_10.txt AC 85 ms 16868 KB
test_11.txt AC 86 ms 16872 KB
test_12.txt AC 85 ms 16864 KB
test_13.txt AC 85 ms 16868 KB
test_14.txt AC 86 ms 16864 KB
test_15.txt AC 86 ms 16868 KB
test_16.txt AC 86 ms 16864 KB
test_17.txt AC 86 ms 16872 KB
test_18.txt AC 85 ms 16864 KB
test_19.txt AC 85 ms 16872 KB
test_20.txt AC 86 ms 16868 KB
test_21.txt AC 96 ms 16872 KB
test_22.txt AC 95 ms 16868 KB
test_23.txt AC 95 ms 16868 KB
test_24.txt AC 95 ms 16864 KB
test_25.txt AC 95 ms 16864 KB
test_26.txt AC 94 ms 16872 KB
test_27.txt AC 95 ms 16868 KB
test_28.txt AC 98 ms 16868 KB
test_29.txt AC 86 ms 16868 KB
test_30.txt AC 86 ms 16872 KB
test_31.txt AC 87 ms 16864 KB
test_32.txt AC 85 ms 16868 KB
test_33.txt AC 92 ms 16864 KB
test_34.txt AC 85 ms 16868 KB
test_35.txt AC 85 ms 16872 KB
test_36.txt AC 95 ms 16868 KB
test_37.txt AC 95 ms 16868 KB
test_38.txt AC 95 ms 16864 KB
test_39.txt AC 95 ms 16864 KB
test_40.txt AC 95 ms 16868 KB
test_41.txt AC 95 ms 16868 KB
test_42.txt AC 95 ms 16868 KB
test_43.txt AC 95 ms 16868 KB