提出 #7776941
ソースコード 拡げる
;; -*- 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 zeta-subtransform!))
(defun zeta-subtransform! (vector &optional (plus #'+))
(declare (vector vector))
(let* ((n (length vector))
;; cardinality of the underlying set
(card (- (integer-length n) 1)))
(assert (= 1 (logcount n)))
(dotimes (i card)
(let ((mask (ash 1 i)))
(dotimes (j n)
(unless (zerop (logand j mask))
(setf (aref vector j)
(funcall plus
(aref vector j)
(aref vector (logxor j mask))))))))
vector))
(declaim (inline zeta-supertransform!))
(defun zeta-supertransform! (vector &optional (plus #'+))
(declare (vector vector))
(let* ((n (length vector))
(card (- (integer-length n) 1)))
(assert (= 1 (logcount n)))
(dotimes (i card)
(let ((mask (ash 1 i)))
(dotimes (j n)
(when (zerop (logand j mask))
(setf (aref vector j)
(funcall plus
(aref vector j)
(aref vector (logior j mask))))))))
vector))
(declaim (inline moebius-subtransform!))
(defun moebius-subtransform! (vector &optional (minus #'-))
(declare (vector vector))
(let* ((n (length vector))
(card (- (integer-length n) 1)))
(assert (= 1 (logcount n)))
(dotimes (i card)
(let ((mask (ash 1 i)))
(dotimes (j n)
(unless (zerop (logand j mask))
(setf (aref vector j)
(funcall minus
(aref vector j)
(aref vector (logxor j mask))))))))
vector))
(declaim (inline moebius-supertransform!))
(defun moebius-supertransform! (vector &optional (minus #'+))
(declare (vector vector))
(let* ((n (length vector))
(card (- (integer-length n) 1)))
(assert (= 1 (logcount n)))
(dotimes (i card)
(let ((mask (ash 1 i)))
(dotimes (j n)
(when (zerop (logand j mask))
(setf (aref vector j)
(funcall minus
(aref vector j)
(aref vector (logior j mask))))))))
vector))
(declaim (ftype (function * (values fixnum &optional)) read-fixnum))
(defun read-fixnum (&optional (in *standard-input*))
(declare #.OPT)
(macrolet ((%read-byte ()
`(the (unsigned-byte 8)
#+swank (char-code (read-char in nil #\Nul))
#-swank (sb-impl::ansi-stream-read-byte in nil #.(char-code #\Nul) nil))))
(let* ((minus nil)
(result (loop (let ((byte (%read-byte)))
(cond ((<= 48 byte 57)
(return (- byte 48)))
((zerop byte) ; #\Nul
(error "Read EOF or #\Nul."))
((= byte #.(char-code #\-))
(setf minus t)))))))
(declare ((integer 0 #.most-positive-fixnum) result))
(loop
(let* ((byte (%read-byte)))
(if (<= 48 byte 57)
(setq result (+ (- byte 48)
(* 10 (the (integer 0 #.(floor most-positive-fixnum 10)) result))))
(return (if minus (- result) result))))))))
(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
;;;
(define-modify-macro minf (new-value) min)
(defconstant +inf+ #xffffffff)
(defun main ()
(declare #.OPT)
(let* ((n (read))
(m (read))
(dp (make-array (expt 2 n) :element-type 'uint32 :initial-element +inf+)))
(declare ((integer 1 12) n)
(uint32 m))
(dotimes (i m)
(let ((a (read-fixnum))
(b (read-fixnum))
(bits 0))
(declare (uint32 bits))
(dotimes (j b)
(let ((c (- (read-fixnum) 1)))
(declare ((mod 12) c))
(setf (ldb (byte 1 c) bits) 1)))
(minf (aref dp bits) a)))
(setf (aref dp 0) 0)
(zeta-supertransform! dp #'min)
(dotimes (bits (expt 2 n))
(let ((res (aref dp bits)))
(declare (uint32 res))
(do ((subset bits (logand (- subset 1) bits)))
((zerop subset))
(let ((dif (logxor bits subset)))
(minf res (+ (aref dp subset) (aref dp dif)))))
(setf (aref dp bits) res)))
(let ((res (aref dp (- (expt 2 n) 1))))
(println
(if (= res +inf+)
-1
res)))))
#-swank (main)
提出情報
| 提出日時 | |
|---|---|
| 問題 | E - Get Everything |
| ユーザ | sansaqua |
| 言語 | Common Lisp (SBCL 1.1.14) |
| 得点 | 500 |
| コード長 | 5897 Byte |
| 結果 | AC |
| 実行時間 | 240 ms |
| メモリ | 29032 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 500 / 500 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00-sample-00, 00-sample-01, 00-sample-02 |
| All | 00-sample-00, 00-sample-01, 00-sample-02, 01-handmade-03, 01-handmade-04, 01-handmade-05, 01-handmade-06, 01-handmade-07, 02-random-08, 02-random-09, 02-random-10, 02-random-11, 02-random-12, 02-random-13, 02-random-14, 02-random-15, 02-random-16, 02-random-17, 02-random-18, 02-random-19, 02-random-20, 02-random-21, 02-random-22, 02-random-23, 02-random-24, 02-random-25, 02-random-26, 02-random-27, 02-random-28, 02-random-29, 02-random-30, 02-random-31, 02-random-32, 02-random-33, 02-random-34, 02-random-35, 02-random-36, 02-random-37, 02-random-38, 02-random-39 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00-sample-00 | AC | 240 ms | 29032 KiB |
| 00-sample-01 | AC | 79 ms | 16868 KiB |
| 00-sample-02 | AC | 78 ms | 16872 KiB |
| 01-handmade-03 | AC | 78 ms | 16868 KiB |
| 01-handmade-04 | AC | 79 ms | 16864 KiB |
| 01-handmade-05 | AC | 78 ms | 16868 KiB |
| 01-handmade-06 | AC | 78 ms | 16872 KiB |
| 01-handmade-07 | AC | 79 ms | 16868 KiB |
| 02-random-08 | AC | 78 ms | 16868 KiB |
| 02-random-09 | AC | 78 ms | 16868 KiB |
| 02-random-10 | AC | 78 ms | 16868 KiB |
| 02-random-11 | AC | 79 ms | 16864 KiB |
| 02-random-12 | AC | 78 ms | 16868 KiB |
| 02-random-13 | AC | 79 ms | 16864 KiB |
| 02-random-14 | AC | 78 ms | 16868 KiB |
| 02-random-15 | AC | 78 ms | 16868 KiB |
| 02-random-16 | AC | 78 ms | 16868 KiB |
| 02-random-17 | AC | 78 ms | 16868 KiB |
| 02-random-18 | AC | 78 ms | 16864 KiB |
| 02-random-19 | AC | 78 ms | 16864 KiB |
| 02-random-20 | AC | 80 ms | 16868 KiB |
| 02-random-21 | AC | 78 ms | 16864 KiB |
| 02-random-22 | AC | 79 ms | 16868 KiB |
| 02-random-23 | AC | 78 ms | 16872 KiB |
| 02-random-24 | AC | 78 ms | 16868 KiB |
| 02-random-25 | AC | 79 ms | 16872 KiB |
| 02-random-26 | AC | 78 ms | 16872 KiB |
| 02-random-27 | AC | 78 ms | 16864 KiB |
| 02-random-28 | AC | 78 ms | 16868 KiB |
| 02-random-29 | AC | 78 ms | 16868 KiB |
| 02-random-30 | AC | 78 ms | 16868 KiB |
| 02-random-31 | AC | 78 ms | 16868 KiB |
| 02-random-32 | AC | 79 ms | 16872 KiB |
| 02-random-33 | AC | 78 ms | 16868 KiB |
| 02-random-34 | AC | 78 ms | 16864 KiB |
| 02-random-35 | AC | 79 ms | 16868 KiB |
| 02-random-36 | AC | 78 ms | 16868 KiB |
| 02-random-37 | AC | 78 ms | 16872 KiB |
| 02-random-38 | AC | 78 ms | 16868 KiB |
| 02-random-39 | AC | 78 ms | 16868 KiB |