提出 #318972


ソースコード 拡げる

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")
;; 

module SI = Set.Make (struct
  type t = int 
  let compare = compare
end)

let solve s =
  let pat = ['o'; 'k'; 'u'] in
  let rec check i =
    if i = String.length s then true
    else if List.mem s.[i] pat then
      check (i + 1)
    else if s.[i] = 'c' && i + 1 < String.length s &&  s.[i + 1] = 'h' then
      check (i + 2)
    else false in
  if check 0 then pf  "YES\n" else pf "NO\n"
;;

let () =
  sf "%s " solve
;;

提出情報

提出日時
問題 B - choku語
ユーザ iab
言語 OCaml (3.12.1)
得点 100
コード長 2794 Byte
結果 AC
実行時間 32 ms
メモリ 1184 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 100 / 100
結果
AC × 3
AC × 53
セット名 テストケース
Sample subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.txt
All subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.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, subtask1-30.txt, subtask1-31.txt, subtask1-32.txt, subtask1-33.txt, subtask1-34.txt, subtask1-35.txt, subtask1-36.txt, subtask1-37.txt, subtask1-38.txt, subtask1-39.txt, subtask1-40.txt, subtask1-41.txt, subtask1-42.txt, subtask1-43.txt, subtask1-44.txt, subtask1-45.txt, subtask1-46.txt, subtask1-47.txt, subtask1-48.txt, subtask1-49.txt, subtask1-50.txt
ケース名 結果 実行時間 メモリ
subtask0-sample01.txt AC 28 ms 1136 KiB
subtask0-sample02.txt AC 28 ms 1152 KiB
subtask0-sample03.txt AC 30 ms 1020 KiB
subtask1-01.txt AC 29 ms 1164 KiB
subtask1-02.txt AC 28 ms 1152 KiB
subtask1-03.txt AC 28 ms 1112 KiB
subtask1-04.txt AC 29 ms 1172 KiB
subtask1-05.txt AC 28 ms 1028 KiB
subtask1-06.txt AC 30 ms 1056 KiB
subtask1-07.txt AC 29 ms 1024 KiB
subtask1-08.txt AC 28 ms 1176 KiB
subtask1-09.txt AC 29 ms 1184 KiB
subtask1-10.txt AC 32 ms 1176 KiB
subtask1-11.txt AC 28 ms 1024 KiB
subtask1-12.txt AC 28 ms 1144 KiB
subtask1-13.txt AC 28 ms 1148 KiB
subtask1-14.txt AC 29 ms 1088 KiB
subtask1-15.txt AC 29 ms 1152 KiB
subtask1-16.txt AC 28 ms 1152 KiB
subtask1-17.txt AC 29 ms 1152 KiB
subtask1-18.txt AC 31 ms 1152 KiB
subtask1-19.txt AC 29 ms 1152 KiB
subtask1-20.txt AC 29 ms 1148 KiB
subtask1-21.txt AC 28 ms 1152 KiB
subtask1-22.txt AC 29 ms 1152 KiB
subtask1-23.txt AC 30 ms 1024 KiB
subtask1-24.txt AC 29 ms 1148 KiB
subtask1-25.txt AC 30 ms 1152 KiB
subtask1-26.txt AC 29 ms 1148 KiB
subtask1-27.txt AC 28 ms 1032 KiB
subtask1-28.txt AC 28 ms 1172 KiB
subtask1-29.txt AC 29 ms 1020 KiB
subtask1-30.txt AC 29 ms 1052 KiB
subtask1-31.txt AC 29 ms 1176 KiB
subtask1-32.txt AC 29 ms 1024 KiB
subtask1-33.txt AC 29 ms 1024 KiB
subtask1-34.txt AC 28 ms 1148 KiB
subtask1-35.txt AC 27 ms 1024 KiB
subtask1-36.txt AC 29 ms 1096 KiB
subtask1-37.txt AC 29 ms 1148 KiB
subtask1-38.txt AC 32 ms 1152 KiB
subtask1-39.txt AC 28 ms 1024 KiB
subtask1-40.txt AC 27 ms 1132 KiB
subtask1-41.txt AC 28 ms 1116 KiB
subtask1-42.txt AC 28 ms 1024 KiB
subtask1-43.txt AC 29 ms 1128 KiB
subtask1-44.txt AC 28 ms 1152 KiB
subtask1-45.txt AC 28 ms 1112 KiB
subtask1-46.txt AC 27 ms 1152 KiB
subtask1-47.txt AC 28 ms 1152 KiB
subtask1-48.txt AC 28 ms 1136 KiB
subtask1-49.txt AC 28 ms 1172 KiB
subtask1-50.txt AC 27 ms 1048 KiB