結果

問題 No.479 頂点は要らない
ユーザー ichibanshiboriichibanshibori
提出日時 2017-01-30 01:02:26
言語 OCaml
(5.1.0)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,008 bytes
コンパイル時間 113 ms
コンパイル使用メモリ 16,452 KB
最終ジャッジ日時 2023-07-30 07:02:29
合計ジャッジ時間 769 ms
ジャッジサーバーID
(参考情報)
judge15 / judge14
このコードへのチャレンジ(β)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
File "Main.ml", line 24, characters 23-33:
24 |       if buy_flg then (String.set ans (n - 2 - idx) '1');
                            ^^^^^^^^^^
Error: Unbound value String.set
Hint: Did you mean get?

ソースコード

diff #

let readln_t2_by f =
  let ( @@ ) lst n = List.nth lst n in
  read_line ()
  |> Str.split (Str.regexp_string " ")
  |> List.map f
  |> fun lst -> (lst @@ 0, lst @@ 1)



let solve n arr =
  let tbl = Hashtbl.create n
  and ans = String.make (n - 1) '0'
  in
  Hashtbl.add tbl (n - 1) false;

  let rec solve' idx =
    if idx < 0 then ()
    else
    (
      let buy_flg =
        List.exists (fun b -> not (Hashtbl.find tbl b)) arr.(idx)
      in
      Hashtbl.add tbl idx buy_flg;
      if buy_flg then (String.set ans (n - 2 - idx) '1');
      solve' (idx - 1)
    )
  in
  solve' (n - 2);
  let sidx = String.index ans '1' in
  String.sub ans sidx (n - 1 - sidx)

let () =
  let n, m = readln_t2_by int_of_string in
  let ab_arr = Array.make (n - 1) []
  and ab_st = Stream.from (
    fun i ->
      if i < m then
        let a, b = readln_t2_by int_of_string in
        Some(a, b)
      else None)
  in
  Stream.iter (fun (a, b) -> ab_arr.(a) <- b :: ab_arr.(a)) ab_st;
  solve n ab_arr |> print_endline
0