結果
| 問題 | No.21 平均の差 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-10-27 03:38:32 |
| 言語 | Common Lisp (sbcl 2.6.3) |
| 結果 |
AC
|
| 実行時間 | 2,674 ms / 5,000 ms |
| コード長 | 4,176 bytes |
| 記録 | |
| コンパイル時間 | 240 ms |
| コンパイル使用メモリ | 52,448 KB |
| 実行使用メモリ | 63,636 KB |
| 最終ジャッジ日時 | 2026-04-03 06:08:58 |
| 合計ジャッジ時間 | 5,504 ms |
|
ジャッジサーバーID (参考情報) |
judge4_1 / judge1_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
コンパイルメッセージ
; compiling file "/home/judge/data/code/Main.lisp" (written 03 APR 2026 06:08:47 AM): ; wrote /home/judge/data/code/Main.fasl ; compilation finished in 0:00:00.063
ソースコード
(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))))