結果
| 問題 | No.52 よくある文字列の問題 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-04-15 02:06:45 |
| 言語 | Standard ML (MLton 20241230) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 5,000 ms |
| コード長 | 1,512 bytes |
| 記録 | |
| コンパイル時間 | 5,182 ms |
| コンパイル使用メモリ | 704,652 KB |
| 実行使用メモリ | 7,972 KB |
| 最終ジャッジ日時 | 2026-04-15 02:06:55 |
| 合計ジャッジ時間 | 3,351 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 11 |
ソースコード
fun member x nil = false
| member x (h::tl) =
if x = h
then true
else member x tl
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
fun findAns s =
let
fun findAnsAux [] acc = findAnsAux acc []
| findAnsAux ((toTaken, toAdd)::tl) acc =
case List.length toTaken = 0 of
true => List.map (fn (_, allAdded) =>
String.implode (List.rev allAdded))
((toTaken, toAdd)::tl)
| false =>
let
val first = List.hd toTaken
val firstRemoved = List.tl toTaken
val last = List.last toTaken
val lastRemoved = List.rev (List.tl (List.rev toTaken))
in
findAnsAux tl ((firstRemoved, first :: toAdd) :: (lastRemoved, last :: toAdd) :: acc)
end
in
List.length
(
List.foldl (fn (x, acc) =>
if member x acc then acc
else x :: acc)
[]
(findAnsAux [(String.explode s, [])] [])
)
end
val () =
let
val s = readStr ()
val ans = findAns s
in
print (Int.toString ans ^ "\n")
end