結果

問題 No.41 貯金箱の溜息(EASY)
ユーザー antaanta
提出日時 2014-10-16 23:48:30
言語 Haskell
(9.8.2)
結果
AC  
実行時間 215 ms / 5,000 ms
コード長 981 bytes
コンパイル時間 3,527 ms
コンパイル使用メモリ 175,744 KB
実行使用メモリ 74,536 KB
最終ジャッジ日時 2024-06-09 16:10:54
合計ジャッジ時間 4,524 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 143 ms
64,048 KB
testcase_01 AC 215 ms
74,536 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Loaded package environment from /home/judge/.ghc/x86_64-linux-9.8.2/environments/default
[1 of 2] Compiling Main             ( Main.hs, Main.o )
[2 of 2] Linking a.out

ソースコード

diff #

-- No.42が普通にわからないのでお茶をにごす
-- TLEするかな?
import Control.Applicative
import Control.Monad
import Data.Int (Int64)
import Data.Array

main = do
    let x = 111111
    t <- readLn
    let dpsum = solve x (fromIntegral$ (10^10 :: Int64) `div` fromIntegral x)
    replicateM_ t$ do
        m <- readLn :: IO Int64
        let ans = dpsum ! fromIntegral (m `div` fromIntegral x)
        print ans

solve :: Int -> Int -> Array Int Int
solve x maxm = dpsum
    where
        dpsum = listArray (0,maxm)
            [ modPlus (if i == 0 then 0 else dpsum ! (i-1)) (dp ! (9,i)) | i <- [0..maxm] ]
        dp :: Array (Int,Int) Int
        dp = listArray ((0,0),(9,maxm)) [ f i j | i <- [0..9], j <- [0..maxm] ]
        f 0 0 = 1
        f 0 _ = 0
        f i j = modPlus (dp ! (i-1, j)) (if j >= i then dp ! (i, j-i) else 0)
        modPlus x y = let z = x + y in if z >= _MOD then z - _MOD else z
        _MOD = 10^9 + 9
0