結果

問題 No.22 括弧の対応
ユーザー deruiderui
提出日時 2016-02-08 22:58:41
言語 OCaml
(5.1.0)
結果
AC  
実行時間 2 ms / 5,000 ms
コード長 801 bytes
コンパイル時間 253 ms
コンパイル使用メモリ 21,704 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-04-17 08:33:17
合計ジャッジ時間 1,020 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,816 KB
testcase_01 AC 2 ms
6,944 KB
testcase_02 AC 1 ms
6,940 KB
testcase_03 AC 2 ms
6,940 KB
testcase_04 AC 1 ms
6,944 KB
testcase_05 AC 2 ms
6,940 KB
testcase_06 AC 2 ms
6,944 KB
testcase_07 AC 1 ms
6,940 KB
testcase_08 AC 2 ms
6,940 KB
testcase_09 AC 2 ms
6,940 KB
testcase_10 AC 2 ms
6,944 KB
testcase_11 AC 2 ms
6,944 KB
testcase_12 AC 2 ms
6,944 KB
testcase_13 AC 2 ms
6,944 KB
testcase_14 AC 1 ms
6,944 KB
testcase_15 AC 2 ms
6,944 KB
testcase_16 AC 2 ms
6,944 KB
testcase_17 AC 1 ms
6,944 KB
testcase_18 AC 2 ms
6,940 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

type paren = Open | Close

let solve position parens =
  let base_paren = String.get parens (position - 1) in
  let start, manipulator, initial = match base_paren with
    | '(' -> (position, succ, 1)
    | ')' -> (position - 2, pred, -1)
    | _ -> failwith ""
  in
  let rec loop next correspond pos =
    if correspond = 0 then pos + 1
    else let paren = String.get parens next in
         match paren with
         | '(' -> loop (manipulator next) (succ correspond) next
         | ')' -> loop (manipulator next) (pred correspond) next
         | _ -> failwith ""
  in
  loop start initial position

let () =
  let info = read_line () in
  let _, target = Scanf.sscanf info "%d %d" (fun len target -> (len, target)) in
  let parens = read_line () in
  Printf.printf "%d\n" (solve target parens)
0