結果
問題 | No.21 平均の差 |
ユーザー | sansaqua |
提出日時 | 2020-10-27 03:38:32 |
言語 | Common Lisp (sbcl 2.3.8) |
結果 |
AC
|
実行時間 | 4,737 ms / 5,000 ms |
コード長 | 4,176 bytes |
コンパイル時間 | 289 ms |
コンパイル使用メモリ | 48,320 KB |
実行使用メモリ | 60,928 KB |
最終ジャッジ日時 | 2024-07-21 21:49:33 |
合計ジャッジ時間 | 6,578 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 10 ms
22,528 KB |
testcase_01 | AC | 19 ms
24,448 KB |
testcase_02 | AC | 51 ms
32,000 KB |
testcase_03 | AC | 9 ms
22,528 KB |
testcase_04 | AC | 4,737 ms
22,656 KB |
testcase_05 | AC | 10 ms
22,400 KB |
testcase_06 | AC | 8 ms
22,400 KB |
testcase_07 | AC | 16 ms
22,784 KB |
testcase_08 | AC | 22 ms
22,656 KB |
testcase_09 | AC | 869 ms
60,928 KB |
コンパイルメッセージ
; compiling file "/home/judge/data/code/Main.lisp" (written 21 JUL 2024 09:49:25 PM): ; wrote /home/judge/data/code/Main.fasl ; compilation finished in 0:00:00.083
ソースコード
(in-package :cl-user) (eval-when (:compile-toplevel :load-toplevel :execute) (defparameter *opt* #+swank '(optimize (speed 3) (safety 2)) #-swank '(optimize (speed 3) (safety 0) (debug 0))) #+swank (ql:quickload '(:cl-debug-print :fiveam :cp/util) :silent t) #+swank (use-package :cp/util :cl-user) #-swank (set-dispatch-macro-character #\# #\> (lambda (s c p) (declare (ignore c p)) `(values ,(read s nil nil t))))) #+swank (set-dispatch-macro-character #\# #\> #'cl-debug-print:debug-print-reader) (macrolet ((def (b) `(progn (deftype ,(intern (format nil "UINT~A" b)) () '(unsigned-byte ,b)) (deftype ,(intern (format nil "INT~A" b)) () '(signed-byte ,b)))) (define-int-types (&rest bits) `(progn ,@(mapcar (lambda (b) `(def ,b)) bits)))) (define-int-types 2 4 7 8 15 16 31 32 62 63 64)) (defconstant +mod+ 1000000007) (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))) (declaim (inline println)) (defun println (obj &optional (stream *standard-output*)) (let ((*read-default-float-format* 'double-float)) (prog1 (princ obj stream) (terpri stream)))) ;; BEGIN_INSERTED_CONTENTS (defpackage :cp/modify-macro (:use :cl) (:export #:minf #:maxf #:mulf #:divf #:iorf #:xorf #:andf)) (in-package :cp/modify-macro) (macrolet ((def (name fname) `(define-modify-macro ,name (new-value) ,fname))) (def minf min) (def maxf max) (def mulf *) (def divf /) (def iorf logior) (def xorf logxor) (def andf logand)) ;; BEGIN_USE_PACKAGE (eval-when (:compile-toplevel :load-toplevel :execute) (use-package :cp/modify-macro :cl-user)) (in-package :cl-user) ;;; ;;; Body ;;; (defun main () (let* ((n (read)) (k (read)) (nums (coerce (loop repeat n collect (read)) '(simple-array uint31 (*)))) (state (make-array n :element-type 'uint8 :initial-element 0)) (sums (make-array k :element-type 'uint31 :initial-element 0)) (counts (make-array k :element-type 'uint31 :initial-element 0)) (res 0)) (labels ((update! () (fill sums 0) (fill counts 0) (dotimes (i n) (let ((num (aref nums i)) (group (aref state i))) (incf (aref sums group) num) (incf (aref counts group)))) (unless (find 0 counts) (loop for sum across sums for count across counts maximize (/ sum count) into max minimize (/ sum count) into min do (maxf res (round (- max min)))))) (dfs (pos) (if (= pos n) (update!) (dotimes (i k) (setf (aref state pos) i) (dfs (+ pos 1)))))) (dfs 1) (println res)))) #-swank (main) ;;; ;;; Test and benchmark ;;; #+swank (progn (defparameter *lisp-file-pathname* (uiop:current-lisp-file-pathname)) (setq *default-pathname-defaults* (uiop:pathname-directory-pathname *lisp-file-pathname*)) (defparameter *dat-pathname* (uiop:merge-pathnames* "test.dat" *lisp-file-pathname*)) (defparameter *problem-url* "https://yukicoder.me/problems/no/21")) #+swank (defun gen-dat () (uiop:with-output-file (out *dat-pathname* :if-exists :supersede) (format out ""))) #+swank (defun bench (&optional (out (make-broadcast-stream))) (time (run *dat-pathname* out))) #-swank (eval-when (:compile-toplevel) (when (or (> sb-c::*compiler-warning-count* 0) sb-c::*undefined-warnings*) (error "count: ~D, undefined warnings: ~A" sb-c::*compiler-warning-count* sb-c::*undefined-warnings*))) ;; To run: (5am:run! :sample) #+swank (5am:test :sample (5am:is (equal "535 " (run "5 3 555 20 432 301 21 " nil))) (5am:is (equal "651 " (run "8 4 329 980 656 738 739 542 873 501 " nil))))