結果

問題 No.41 貯金箱の溜息(EASY)
ユーザー antaanta
提出日時 2014-10-16 23:48:30
言語 Haskell
(9.8.2)
結果
AC  
実行時間 264 ms / 5,000 ms
コード長 981 bytes
コンパイル時間 6,650 ms
コンパイル使用メモリ 164,068 KB
実行使用メモリ 76,928 KB
最終ジャッジ日時 2023-08-28 21:15:40
合計ジャッジ時間 4,492 ms
ジャッジサーバーID
(参考情報)
judge14 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 174 ms
66,444 KB
testcase_01 AC 264 ms
76,928 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Loaded package environment from /home/judge/.ghc/x86_64-linux-9.6.1/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