結果

問題 No.112 ややこしい鶴亀算
コンテスト
ユーザー tanson
提出日時 2026-04-26 00:29:19
言語 Standard ML
(MLton 20241230)
コンパイル:
mlton_wrapper _filename_
実行:
./main
結果
AC  
実行時間 1 ms / 5,000 ms
コード長 1,671 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,640 ms
コンパイル使用メモリ 704,360 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-04-26 00:29:29
合計ジャッジ時間 3,406 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 23
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

fun readInt () =
    valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn)


fun member x nil = false
  | member x (h::tl) =
    if x = h
    then true
    else member x tl

fun asSet nil = nil
  | asSet (h::tl) = 
    let
        val set' = asSet tl
    in
        if member h set'
        then set'
        else h :: set'
    end


val () =
    let
        val n = readInt ()
        val a_s = List.tabulate (n, fn _ => readInt ())

        val set = asSet a_s
                                   
        val (ansCrane, ansTurtle) = if List.length set = 1
                  then
                      (
                        if List.hd set = (n - 1) * 2 then (n, 0)
                        else (0, n)
                      )
                  else
                      (
                        let
                            val (turtleValue, craneValue) = if List.nth (set, 0) < List.nth (set, 1)
                                                            then (List.nth (set, 0), List.nth (set, 1))
                                                            else (List.nth (set, 1), List.nth (set, 0))
                        in
                            List.foldl (fn (a, (craneAcc, turtleAcc)) =>
                                           if a = craneValue
                                           then (craneAcc + 1, turtleAcc)
                                           else (craneAcc, turtleAcc + 1))
                                       (0, 0)
                                       a_s
                        end
                      )
    in    
        print (Int.toString ansCrane ^ " " ^ Int.toString ansTurtle ^ "\n")
    end

0