提出 #346409
ソースコード 拡げる
let pf = Printf.printf ;;
let epf = Printf.eprintf ;;
let sf = Scanf.scanf ;;
let (|>) x f = f x ;;
let (@@) f x = f x ;;
module Array = struct
include ArrayLabels
let foldi ~f ~init arr =
let acc = ref init in
for i = 0 to Array.length arr - 1 do
acc := f i !acc arr.(i)
done;
!acc
;;
let findi arr ~f =
let len = Array.length arr in
let rec iter i =
if i = len then None
else if f arr.(i) then Some i
else iter (i + 1) in
iter 0
;;
let findi_exn arr ~f =
let len = Array.length arr in
let rec iter i =
if i = len then None
else if f arr.(i) then Some i
else iter (i + 1) in
iter 0
;;
(* i ∈ [0..res) -> not (f i) /\ i ∈ [res, len) -> f i *)
let lower_bound arr ~f =
let l, h = 0, Array.length arr in
(* res ∈ (l, h] *)
let rec iter l h =
if l = h - 1 then h
else
let m = (l + h) lsr 1 in
if f m then iter l m
else iter m h in
iter l h
;;
(* i ∈ [0..res] -> f i /\ i ∈ (res, len) -> not (f i) *)
let upper_bound arr ~f =
let l, h = 0, Array.length arr in
(* res ∈ [l, h) *)
let rec iter l h =
if l = h - 1 then l
else
let m = (l + h) lsr 1 in
if f m then iter m h
else iter l m in
iter l h
;;
end
module String = StringLabels ;;
module List = struct
include ListLabels ;;
let rec repeat n a = if n = 0 then [] else a :: repeat (n - 1) a ;;
let rec drop n a =
if n = 0 then a
else match a with
| [] -> failwith "cannot take"
| x :: xs -> drop (n - 1) xs ;;
let init ~f n =
let res = ref [] in
for i = 0 to n - 1 do
res := f i :: !res
done;
List.rev !res
;;
end ;;
module H = Hashtbl ;;
let c = ref ' ' ;;
let is_num c = '0' <= c && c <= '9' ;;
let is_space c = c = ' ' || c = '\n' || c = '\t' ;;
let to_num c = Char.code c - Char.code '0' ;;
let read_char () = input_char stdin ;;
let next_int () =
while is_space !c do
c := read_char () ;
done;
let ok = ref false in
let acc = ref 0 in
while is_num !c do
ok := true;
acc := !acc * 10 + to_num !c;
c := read_char ();
done;
if !ok then !acc
else raise (Failure "next_int")
;;
let rec div2iter n =
if n mod 2 = 0 then div2iter (n / 2)
else n
;;
module SI = Set.Make (struct
type t = int
let compare x y = compare (div2iter x) (div2iter y)
end)
let solve n xs =
pf "%d\n" (SI.cardinal @@ Array.fold_left xs ~init:SI.empty ~f:(fun acc x -> SI.add x acc))
;;
let () = sf "%d " (fun n -> solve n @@ Array.init n ~f:(fun _ -> sf "%d " (fun x -> x)))
提出情報
| 提出日時 | |
|---|---|
| 問題 | C - 高橋くんと魔法の箱 |
| ユーザ | iab |
| 言語 | OCaml (3.12.1) |
| 得点 | 100 |
| コード長 | 2747 Byte |
| 結果 | AC |
| 実行時間 | 334 ms |
| メモリ | 11248 KiB |
ジャッジ結果
| セット名 | Sample | Subtask1 | Subtask2 | All | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 20 / 20 | 30 / 30 | 50 / 50 | ||||||||
| 結果 |
|
|
|
|
| セット名 | テストケース |
|---|---|
| Sample | subtask0_0.txt, subtask0_1.txt, subtask0_2.txt |
| Subtask1 | subtask1_0.txt, subtask1_1.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_2.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt, subtask0_0.txt, subtask0_1.txt, subtask0_2.txt |
| Subtask2 | subtask2_0.txt, subtask2_1.txt, subtask2_2.txt, subtask2_3.txt, subtask2_4.txt, subtask2_5.txt, subtask2_6.txt, subtask2_7.txt, subtask2_8.txt, subtask2_9.txt, subtask0_0.txt, subtask0_1.txt, subtask0_2.txt |
| All | subtask0_0.txt, subtask0_1.txt, subtask0_2.txt, subtask1_0.txt, subtask1_1.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_2.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt, subtask2_0.txt, subtask2_1.txt, subtask2_2.txt, subtask2_3.txt, subtask2_4.txt, subtask2_5.txt, subtask2_6.txt, subtask2_7.txt, subtask2_8.txt, subtask2_9.txt, subtask3_0.txt, subtask3_1.txt, subtask3_2.txt, subtask3_3.txt, subtask3_4.txt, subtask3_5.txt, subtask3_6.txt, subtask3_7.txt, subtask3_8.txt, subtask3_9.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| subtask0_0.txt | AC | 25 ms | 924 KiB |
| subtask0_1.txt | AC | 23 ms | 916 KiB |
| subtask0_2.txt | AC | 23 ms | 804 KiB |
| subtask1_0.txt | AC | 28 ms | 2976 KiB |
| subtask1_1.txt | AC | 29 ms | 3100 KiB |
| subtask1_10.txt | AC | 28 ms | 2976 KiB |
| subtask1_11.txt | AC | 30 ms | 2976 KiB |
| subtask1_12.txt | AC | 30 ms | 2988 KiB |
| subtask1_13.txt | AC | 30 ms | 2992 KiB |
| subtask1_14.txt | AC | 28 ms | 2976 KiB |
| subtask1_15.txt | AC | 30 ms | 2972 KiB |
| subtask1_16.txt | AC | 30 ms | 2980 KiB |
| subtask1_17.txt | AC | 30 ms | 2968 KiB |
| subtask1_18.txt | AC | 30 ms | 3100 KiB |
| subtask1_19.txt | AC | 31 ms | 2984 KiB |
| subtask1_2.txt | AC | 29 ms | 2980 KiB |
| subtask1_3.txt | AC | 31 ms | 2988 KiB |
| subtask1_4.txt | AC | 29 ms | 2988 KiB |
| subtask1_5.txt | AC | 31 ms | 2968 KiB |
| subtask1_6.txt | AC | 35 ms | 3120 KiB |
| subtask1_7.txt | AC | 29 ms | 2976 KiB |
| subtask1_8.txt | AC | 29 ms | 3104 KiB |
| subtask1_9.txt | AC | 33 ms | 2928 KiB |
| subtask2_0.txt | AC | 188 ms | 7600 KiB |
| subtask2_1.txt | AC | 308 ms | 10156 KiB |
| subtask2_2.txt | AC | 322 ms | 10280 KiB |
| subtask2_3.txt | AC | 317 ms | 10136 KiB |
| subtask2_4.txt | AC | 304 ms | 10140 KiB |
| subtask2_5.txt | AC | 297 ms | 10148 KiB |
| subtask2_6.txt | AC | 303 ms | 10280 KiB |
| subtask2_7.txt | AC | 292 ms | 10152 KiB |
| subtask2_8.txt | AC | 296 ms | 10152 KiB |
| subtask2_9.txt | AC | 288 ms | 10148 KiB |
| subtask3_0.txt | AC | 151 ms | 7576 KiB |
| subtask3_1.txt | AC | 308 ms | 11164 KiB |
| subtask3_2.txt | AC | 334 ms | 11172 KiB |
| subtask3_3.txt | AC | 318 ms | 11172 KiB |
| subtask3_4.txt | AC | 334 ms | 11112 KiB |
| subtask3_5.txt | AC | 303 ms | 10916 KiB |
| subtask3_6.txt | AC | 324 ms | 10924 KiB |
| subtask3_7.txt | AC | 320 ms | 11248 KiB |
| subtask3_8.txt | AC | 322 ms | 11172 KiB |
| subtask3_9.txt | AC | 332 ms | 10912 KiB |