結果
問題 | No.1380 Borderline |
ユーザー |
|
提出日時 | 2021-06-02 09:40:37 |
言語 | OCaml (5.2.1) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,441 bytes |
コンパイル時間 | 290 ms |
コンパイル使用メモリ | 19,820 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-14 07:50:49 |
合計ジャッジ時間 | 1,554 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 41 |
ソースコード
(*N 人参加 -> 定員K定員を超えないようなボーダーを指定する*)let split_on_char sep s =let r = ref [] inlet j = ref (String.length s) infor i = String.length s - 1 downto 0 doif String.unsafe_get s i = sep then beginr := String.sub s (i + 1) (!j - i - 1) :: !r;j := ienddone;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) thenif (kazu > limit) then limitelse goukaku (limit - kazu) 1 h tlelsegoukaku limit (kazu + 1) ten tl;;let () =let raw = read_line () |> split_on_char ' ' |> List.map int_of_string inlet k = List.nth raw 1 inlet lst = read_line () |> split_on_char ' ' |> List.map int_of_string|> List.fast_sort (fun x y -> - (compare x y)) inlet nokori = goukaku k 0 0 lst inprint_int (k - nokori);print_newline ();;