所以我一直在尝试通过解决 Codeforce 上的一些问题来学习 Haskell。
即使我认为我的时间复杂度是最佳的,我也得到了很多 TLE(超出时间限制)。
我的问题是:是我编写这个程序的方式使它变慢了吗?
例如,这里是问题。
基本上答案是找到给定的,其中
and =和之间的除数数之差。annan = 2*an-1 + D(n)D(n)nn-1
(更新:上限为n10 6)。
下面是我的程序。
import qualified Data.Map.Strict as Map
main = do t <- read <$> getLine
putStrLn . show $ solve t
solve :: Integer -> Integer
solve 0 = 1
solve 1 = 1
solve n = (2*(solve (n-1)) + (fact n) - (fact (n-1))) `mod` 998244353
where fact …Run Code Online (Sandbox Code Playgroud)