結果

問題 No.792 真理関数をつくろう
ユーザー xsdxsd
提出日時 2020-06-30 02:41:58
言語 OCaml
(5.1.0)
結果
WA  
実行時間 -
コード長 1,368 bytes
コンパイル時間 273 ms
コンパイル使用メモリ 21,708 KB
実行使用メモリ 11,076 KB
最終ジャッジ日時 2024-10-09 01:43:51
合計ジャッジ時間 1,883 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 6 ms
6,400 KB
testcase_02 AC 2 ms
5,248 KB
testcase_03 AC 10 ms
7,040 KB
testcase_04 AC 2 ms
5,248 KB
testcase_05 AC 10 ms
6,912 KB
testcase_06 AC 84 ms
9,900 KB
testcase_07 AC 3 ms
5,248 KB
testcase_08 AC 2 ms
5,248 KB
testcase_09 AC 2 ms
5,248 KB
testcase_10 AC 2 ms
5,248 KB
testcase_11 AC 2 ms
5,248 KB
testcase_12 AC 2 ms
5,248 KB
testcase_13 AC 2 ms
5,248 KB
testcase_14 AC 2 ms
5,248 KB
testcase_15 AC 2 ms
5,248 KB
testcase_16 AC 23 ms
8,104 KB
testcase_17 AC 2 ms
5,248 KB
testcase_18 AC 2 ms
5,248 KB
testcase_19 AC 2 ms
5,248 KB
testcase_20 AC 11 ms
6,144 KB
testcase_21 AC 285 ms
11,076 KB
testcase_22 AC 2 ms
5,248 KB
testcase_23 WA -
testcase_24 WA -
testcase_25 AC 2 ms
5,248 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

Scanf.scanf "%d" (fun n ->
    let l = 1 lsl n in
    let q = Array.init l (fun _ ->
        let c = Array.init n (fun _ ->
            Scanf.scanf " %d" (fun q -> q))
        in
        let r = Scanf.scanf " %d" (fun r -> r) in
        c, r
    )
    in
    let rec loop i t f =
        if i = l then t, f else
            let (_, r) = q.(i) in
            loop (i + 1) (t land r) (f lor r)
    in
    let t, f = loop 0 1 0 in
    let calc () =
        let str qq =
            let rec loop j acc =
                if j = n then acc ^ ")" else
                    let tmp =
                        if qq.(j) = 1 then Printf.sprintf "P_%d" (j + 1)
                                      else Printf.sprintf "¬P_%d" (j + 1)
                    in
                    let acc = if acc = "" then "(" ^ tmp else acc ^ "∧" ^ tmp in
                    loop (j + 1) acc
            in
            loop 0 ""
        in
        let rec loop i acc =
            if i = l then acc else
                let (qq, r) = q.(i) in
                if r = 0 then loop (i + 1) acc else
                    let s = str qq in
                    let acc = if acc = "" then "A=" ^ s else acc ^ "∨" ^ s in
                    loop (i + 1) acc
        in
        loop 0 ""
    in
    print_endline @@
        if t = 1 then "⊤" else
        if f = 0 then "⊥" else
            calc ()
)
0