(* N 人参加 -> 定員K 定員を超えないようなボーダーを指定する *) let split_on_char sep s = let r = ref [] in let j = ref (String.length s) in for i = String.length s - 1 downto 0 do if String.unsafe_get s i = sep then begin r := String.sub s (i + 1) (!j - i - 1) :: !r; j := i end done; String.sub s 0 !j :: !r;; (* ソートして降順にする    まず同じ点数の数を数え上げる  違う点数になったら残り定員と比較する  -> もし定員のほうが多ければ、そのまま定員を引く  -> もし同じ点数の人数のほうが多ければ、その点数より +1かボーダーとなる 今回は合格人数なので、元の定員の数から残った定員の数だけ引けば、合格人数が定まる *) let rec goukaku limit kazu ten lst = match lst with | [] -> if (kazu > limit) then limit else (limit - kazu) | h::tl -> if (h <> ten) then if (kazu > limit) then limit else goukaku (limit - kazu) 1 h tl else goukaku limit (kazu + 1) ten tl;; let () = let raw = read_line () |> split_on_char ' ' |> List.map int_of_string in let k = List.nth raw 1 in let lst = read_line () |> split_on_char ' ' |> List.map int_of_string |> List.fast_sort (fun x y -> compare x y) in let nokori = goukaku k 0 0 lst in print_int (k - nokori); print_newline ();;