wvogel日記

自分用の技術備忘録が多めです.

ants

ttp://poj.org/problem?id=1852
にある、蟻の問題。(POJ,No.1852)
どうやるのか思いつかなかったけど、解放読んだら感動したので書いてみた。

datalist :: Int -> String -> [Int]
datalist n = map read.take n.words

minf :: Int -> [Int] -> Int
minf l = foldl max 0.map (\x->min x (l-x))

maxf :: Int -> [Int] -> Int
maxf l = foldl max 0.map (\x->min l (l-x))

ansn :: Int -> String
ansn = (++) "min = ".show

ansx :: Int -> String
ansx = (++) "max = ".show

main = do ln <- getLine
          cs <-getContents
          print.ansn.minf (l' ln).datalist (n ln) $ cs
          print.ansx.maxf (l' ln).datalist (n ln) $ cs
  where
    l' :: String -> Int
    l' = read.head.words
    n = read.head.tail.words


アルゴリズムを知ってしまうとなんて簡単な問題なんだと思えるけれど、こんなの自力でひらめくかどうか.....