haskell讨论,求大佬指导
查看原帖
haskell讨论,求大佬指导
625398
_OTZ_楼主2024/10/7 17:05

业余喜爱haskell,请大佬们指导一下

因为没有 Data.Vector 包,所以使用了 Map 充当动态数组,请教大佬们有没有好的建议解决此问题


module Main where

import Control.Monad.State
import qualified Data.Map as M

main :: IO ()
main = do
  [a, n, m, x] <- fmap read . words <$> getLine
  print $ evaluateAns a n m x

calculate :: Int -> State (M.Map Int (Int, Int)) ()
calculate 1 = put . M.fromList $ [(1, (1, 0))]
calculate 2 = calculate 1 >> get >>= put . M.insert 2 (0, 1)
calculate n = do
  calculate $ n - 1
  cache <- get
  let (Just (n1x, n1y)) = M.lookup (n - 1) cache
      (Just (n2x, n2y)) = M.lookup (n - 2) cache
  put $ M.insert n (n1x + n2x, n1y + n2y) cache

evaluateAns a n m x = flip evalState mempty $ do
  calculate n
  cache <- get
  let (Just (nx, ny)) = M.lookup (n - 1) cache
      (Just (mx, my)) = M.lookup x cache
      b = (m - nx * a - a) `div` (ny - 1)
  return $ (mx + 1) * a + (my - 1) * b
2024/10/7 17:05
加载中...