結果
| 問題 |
No.1767 BLUE to RED
|
| コンテスト | |
| ユーザー |
motoshira
|
| 提出日時 | 2021-11-27 00:31:44 |
| 言語 | Common Lisp (sbcl 2.5.0) |
| 結果 |
AC
|
| 実行時間 | 334 ms / 2,000 ms |
| コード長 | 2,679 bytes |
| コンパイル時間 | 111 ms |
| コンパイル使用メモリ | 37,696 KB |
| 実行使用メモリ | 82,280 KB |
| 最終ジャッジ日時 | 2024-06-29 19:15:39 |
| 合計ジャッジ時間 | 6,821 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 |
コンパイルメッセージ
; compiling file "/home/judge/data/code/Main.lisp" (written 29 JUN 2024 07:15:32 PM): ; wrote /home/judge/data/code/Main.fasl ; compilation finished in 0:00:00.014
ソースコード
(in-package #:cl-user)
;;------------------------------Preferences------------------------------
(eval-when (:compile-toplevel :load-toplevel :execute)
#+swank (declaim (optimize (speed 3) (safety 2)))
#-swank (declaim (optimize (speed 3) (safety 0) (debug 0)))
#+swank (load "~/ghq/github.com/motoshira/atcoder-submission/ac-tools/act.lisp")
#+swank (ql:quickload :prove)
#-swank (declaim (sb-ext:muffle-conditions sb-ext:compiler-note))
#-swank (sb-ext:disable-debugger)
(pushnew :inline-generic-funcion *features*))
;;---------------------------------Body---------------------------------
(in-package #:cl-user)
(declaim (inline println))
(defun println (obj &optional (stream *standard-output*))
(let ((*read-default-float-format* 'double-float))
(prog1 obj
(princ obj stream)
(terpri stream))))
(defun read-into (count &optional (result-type 'list) (reader #'read))
(coerce (loop :repeat count :collect (funcall reader)) result-type))
(defconstant +inf+ #.(ash 1 60))
(defun main ()
(let* ((n (read))
(m (read))
(as (read-into n))
(bs (read-into m))
(es nil))
;; blue -> 0
;; red -> 1
(dolist (a as)
(push (list a 1) es))
(push (list +inf+ 1) es)
(push (list (- +inf+) 1) es)
(dolist (b bs)
(push (list b 0) es))
(setf es (sort es #'< :key #'first))
(let ((res 0)
(cs nil)
(a nil))
(flet ((push-blue! (blue)
(push blue cs))
(inc-and-flush-blue! (red)
(declare (fixnum red))
(when a
(incf res
(- (1- (abs (- red a)))
(loop :for (b0 b1) :on (concatenate 'list
(list a)
(reverse cs)
(list red))
:by #'cdr
:when b1
:maximize (1- (- b1 b0))))))
(setf a red
cs nil)))
(loop :for (value type) :in es
:do (ecase type
(0 (push-blue! value))
(1 (inc-and-flush-blue! value))))
(println res)))))
#-swank (main)
#+swank
(defun run ()
(let ((*standard-input*
(make-string-input-stream
(with-output-to-string (*standard-output*)
(run-program
(merge-pathnames "copy-or-paste" (truename "~/bin/"))
'()
:output *standard-output*)))))
(main)))
motoshira