結果

問題 No.349 干支の置き物
コンテスト
ユーザー tanson
提出日時 2026-06-06 16:08:19
言語 Standard ML
(MLton 20241230)
コンパイル:
mlton_wrapper _filename_
実行:
./main
結果
AC  
実行時間 1 ms / 2,000 ms
コード長 1,332 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 5,020 ms
コンパイル使用メモリ 708,648 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-06-06 16:08:27
合計ジャッジ時間 6,606 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge1_1
純コード判定待ち
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 29
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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


fun readStr () =
    let
        fun scan reader stream = SOME (StringCvt.splitl (not o Char.isSpace) reader (StringCvt.skipWS reader stream))
    in
        valOf (TextIO.scanStream scan TextIO.stdIn)
    end

exception BadInput
fun etoToNum "ne" = 0
  | etoToNum "ushi" = 1
  | etoToNum "tora" = 2
  | etoToNum "u" = 3
  | etoToNum "tatsu" = 4
  | etoToNum "mi" = 5
  | etoToNum "uma" = 6
  | etoToNum "hitsuji" = 7
  | etoToNum "saru" = 8
  | etoToNum "tori" = 9
  | etoToNum "inu" = 10
  | etoToNum "i" = 11
  | etoToNum _ = raise BadInput

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

        val table = Array.array (12, 0)

        fun updateTable i = Array.update (table, i, Array.sub (table, i) + 1)
         

        fun processData [] = ignore ()
          | processData (h::tl) =
            (
              updateTable (etoToNum h);
              processData tl
            )

        val limit = if n mod 2 = 0 then n div 2
                    else (n + 1) div 2

        val ans =
            (
              processData a_s;
              if Array.exists (fn v => limit < v) table then "NO"
              else "YES"
            )
    in
        print (ans ^ "\n")
    end
0