CodeChef上的TimeOut

Ing*_*das 4 haskell

我是CodeChef的新手并想到尝试一些问题,所以我解决了"Bytelandian金币"问题.(http://www.codechef.com/problems/COINS/)我在计算机上获得即时结果,CodeChef设置了9秒的时间限制,但我仍然从CodeChef获取TimeOut.我不再有任何线索导致这种情况.任何提示都会有所帮助.

我的代码:

module Main where

import qualified Data.Map as M
import Data.Map (Map)
import Data.Maybe

main = do
    catch (main' M.empty 1) (const $ return ()) 

main' _ 11 = return ()
main' m c = do
    x <- readLn
    let (k,m2) = sol m x
    print k
    main' m2 (c+1)


sol :: Map Integer Integer -> Integer -> (Integer, Map Integer Integer)
sol m x     |M.member x m = (fromJust $ M.lookup x m,m)
            |x > x2+x3+x4 = (x,M.insert x x m)
            |otherwise = (fullSoll, M.insert x fullSoll m4)
    where
        x2 = div x 2
        x3 = div x 3
        x4 = div x 4
        (sx2, m2) = sol m x2
        (sx3, m3) = sol m2 x3
        (sx4, m4) = sol m3 x4
        fullSoll = sx2+sx3+sx4
Run Code Online (Sandbox Code Playgroud)

Sco*_*est 5

sol当你没有终止时x == 0.当x为1时它很好,因为所有x2, x3, x4都是0,并且它们的总和小于x,意味着第二个守卫是真的,并且没有递归.但是,当输入为0时,递归情况会启动,并且它永远不会终止.