Submission #3962590
Source Code Expand
;; -*- coding: utf-8 -*- (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 (deftype non-negative-fixnum () '(integer 0 #.most-positive-fixnum)) (defstruct (union-find (:constructor make-union-find (size &aux (parents (let ((seq (make-array size :element-type 'non-negative-fixnum))) (dotimes (i size seq) (setf (aref seq i) i)))) (ranks (make-array size :element-type 'non-negative-fixnum :initial-element 0))))) (parents nil :type (simple-array non-negative-fixnum (*))) (ranks nil :type (simple-array non-negative-fixnum (*)))) (declaim (ftype (function * (values non-negative-fixnum &optional)) uf-root)) (defun uf-root (x uf-tree) "Returns the root of X." (declare (optimize (speed 3)) (non-negative-fixnum x)) (let ((parents (union-find-parents uf-tree))) (if (= x (aref parents x)) x (setf (aref parents x) (uf-root (aref parents x) uf-tree))))) (declaim (inline uf-unite!)) (defun uf-unite! (x1 x2 uf-tree) "Unites X1 and X2 destructively." (let ((root1 (uf-root x1 uf-tree)) (root2 (uf-root x2 uf-tree)) (parents (union-find-parents uf-tree)) (ranks (union-find-ranks uf-tree))) (cond ((= root1 root2) nil) ((< (aref ranks root1) (aref ranks root2)) (setf (aref parents root1) root2)) ((= (aref ranks root1) (aref ranks root2)) (setf (aref parents root2) root1) (incf (aref ranks root1))) (t (setf (aref parents root2) root1))))) (declaim (inline uf-connected-p)) (defun uf-connected-p (x1 x2 uf-tree) "Checks if X1 and X2 have the same root." (= (uf-root x1 uf-tree) (uf-root x2 uf-tree))) (defmacro buffered-read-line (&optional (buffer-size 30) (in '*standard-input*) (terminate-char #\Space)) "Note that the returned string may be changed by repetitive use." (let ((buffer (gensym)) (character (gensym)) (idx (gensym))) `(let ((,buffer (load-time-value (make-string ,buffer-size :element-type 'base-char :initial-element ,terminate-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 ,buffer))))) (defmacro split-ints-and-bind (arg-lst string &body body) (let ((pos1 (gensym "POS")) (pos2 (gensym "POS")) (str (gensym "STR"))) (labels ((expand (arg-lst &optional (init-pos1 t)) (if (null arg-lst) body `((let* ((,pos1 ,(if init-pos1 0 `(1+ ,pos2))) (,pos2 (position #\space ,str :start ,pos1 :test #'char=)) (,(car arg-lst) (parse-integer ,str :start ,pos1 :end ,pos2))) ,@(expand (cdr arg-lst) nil)))))) `(let ((,str ,string)) (declare (string ,str)) ,@(expand arg-lst))))) (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 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 (defun main () (declare #.OPT) (let* ((n (read)) (q (read)) (tree (make-union-find (* 2 (1+ n))))) (dotimes (i q) (split-ints-and-bind (w x y z) (buffered-read-line) (declare (uint32 w x y z)) (if (= w 1) (if (evenp z) (progn (uf-unite! (+ x x) (+ y y) tree) (uf-unite! (+ x x -1) (+ y y -1) tree)) (progn (uf-unite! (+ x x) (+ y y -1) tree) (uf-unite! (+ x x -1) (+ y y) tree))) (if (uf-connected-p (+ x x) (+ y y) tree) (write-line "YES") (write-line "NO"))))))) #-swank(main)
Submission Info
Submission Time | |
---|---|
Task | D - 偶数メートル |
User | sansaqua |
Language | Common Lisp (SBCL 1.1.14) |
Score | 100 |
Code Size | 4892 Byte |
Status | AC |
Exec Time | 311 ms |
Memory | 31592 KB |
Judge Result
Set Name | Sample | Subtask1 | Subtask2 | ||||||
---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 30 / 30 | 70 / 70 | ||||||
Status |
|
|
|
Set Name | Test Cases |
---|---|
Sample | sample_01.txt, sample_02.txt, sample_03.txt |
Subtask1 | sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_25.txt, subtask1_26.txt, subtask1_27.txt, subtask1_28.txt, subtask1_29.txt |
Subtask2 | sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_25.txt, subtask1_26.txt, subtask1_27.txt, subtask1_28.txt, subtask1_29.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt, subtask2_16.txt, subtask2_17.txt, subtask2_18.txt, subtask2_19.txt, subtask2_20.txt, subtask2_21.txt, subtask2_22.txt, subtask2_23.txt, subtask2_24.txt, subtask2_25.txt, subtask2_26.txt, subtask2_27.txt, subtask2_28.txt, subtask2_29.txt, subtask2_30.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
sample_01.txt | AC | 274 ms | 31592 KB |
sample_02.txt | AC | 109 ms | 18916 KB |
sample_03.txt | AC | 109 ms | 18916 KB |
subtask1_01.txt | AC | 112 ms | 20960 KB |
subtask1_02.txt | AC | 112 ms | 18912 KB |
subtask1_03.txt | AC | 113 ms | 20968 KB |
subtask1_04.txt | AC | 111 ms | 18920 KB |
subtask1_05.txt | AC | 111 ms | 18912 KB |
subtask1_06.txt | AC | 111 ms | 20968 KB |
subtask1_07.txt | AC | 111 ms | 18920 KB |
subtask1_08.txt | AC | 114 ms | 20968 KB |
subtask1_09.txt | AC | 116 ms | 20964 KB |
subtask1_10.txt | AC | 115 ms | 20960 KB |
subtask1_11.txt | AC | 116 ms | 20964 KB |
subtask1_12.txt | AC | 115 ms | 20964 KB |
subtask1_13.txt | AC | 116 ms | 20964 KB |
subtask1_14.txt | AC | 116 ms | 20964 KB |
subtask1_15.txt | AC | 115 ms | 20964 KB |
subtask1_16.txt | AC | 114 ms | 20964 KB |
subtask1_17.txt | AC | 115 ms | 20964 KB |
subtask1_18.txt | AC | 115 ms | 20964 KB |
subtask1_19.txt | AC | 115 ms | 20968 KB |
subtask1_20.txt | AC | 115 ms | 20968 KB |
subtask1_21.txt | AC | 115 ms | 20964 KB |
subtask1_22.txt | AC | 115 ms | 20968 KB |
subtask1_23.txt | AC | 115 ms | 20968 KB |
subtask1_24.txt | AC | 116 ms | 20964 KB |
subtask1_25.txt | AC | 115 ms | 20964 KB |
subtask1_26.txt | AC | 115 ms | 20968 KB |
subtask1_27.txt | AC | 115 ms | 20964 KB |
subtask1_28.txt | AC | 116 ms | 20964 KB |
subtask1_29.txt | AC | 115 ms | 20960 KB |
subtask2_01.txt | AC | 179 ms | 21088 KB |
subtask2_02.txt | AC | 277 ms | 23136 KB |
subtask2_03.txt | AC | 120 ms | 20968 KB |
subtask2_04.txt | AC | 268 ms | 21092 KB |
subtask2_05.txt | AC | 187 ms | 23136 KB |
subtask2_06.txt | AC | 185 ms | 23136 KB |
subtask2_07.txt | AC | 263 ms | 23144 KB |
subtask2_08.txt | AC | 286 ms | 23140 KB |
subtask2_09.txt | AC | 218 ms | 21092 KB |
subtask2_10.txt | AC | 310 ms | 23272 KB |
subtask2_11.txt | AC | 311 ms | 23268 KB |
subtask2_12.txt | AC | 305 ms | 23268 KB |
subtask2_13.txt | AC | 309 ms | 23272 KB |
subtask2_14.txt | AC | 309 ms | 23264 KB |
subtask2_15.txt | AC | 309 ms | 23268 KB |
subtask2_16.txt | AC | 307 ms | 23264 KB |
subtask2_17.txt | AC | 309 ms | 23272 KB |
subtask2_18.txt | AC | 306 ms | 23268 KB |
subtask2_19.txt | AC | 311 ms | 23272 KB |
subtask2_20.txt | AC | 308 ms | 23268 KB |
subtask2_21.txt | AC | 213 ms | 23016 KB |
subtask2_22.txt | AC | 210 ms | 23016 KB |
subtask2_23.txt | AC | 212 ms | 23012 KB |
subtask2_24.txt | AC | 211 ms | 23008 KB |
subtask2_25.txt | AC | 212 ms | 23008 KB |
subtask2_26.txt | AC | 211 ms | 23012 KB |
subtask2_27.txt | AC | 212 ms | 23012 KB |
subtask2_28.txt | AC | 209 ms | 23016 KB |
subtask2_29.txt | AC | 212 ms | 23012 KB |
subtask2_30.txt | AC | 295 ms | 21224 KB |