Submission #41239917
Source Code Expand
import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.List
import Data.Array
import qualified Data.IntSet as IS
main = do
[n,m] <- bsGetLnInts
fs <- replicateM n (head <$> bsGetLnInts)
let ans = abc017d n m fs
print ans
bsGetLnInts :: IO [Int]
bsGetLnInts = unfoldr (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine
abc017d :: Int -> Int -> [Int] -> Int
abc017d n m fs = count ! n
where
count = listArray (0,n) $ 1 : loop 0 1 1 IS.empty fs fs
loop :: Int -- k : 左端の位置
-> Int -- i : 右端、次に値を決めるcount[i]の位置
-> Int -- s : kからi-1までのcount[]の総和
-> IS.IntSet -- is : k+1からiまでにある味の集合
-> [Int] -- fks : kの味、以降のリスト
-> [Int] -- fis : iの味、以降のリスト
-> [Int] -- 答え count[1]~count[N] の値を順に
loop k i s is fks fis
-- 右の味が尽きたなら、全てを計算し終えた
| null fis = []
-- 右の味が既にあるなら、左を縮める
| IS.member fi is = loop (succ k) i (reg $ s - count ! k) (IS.delete fk is) (tail fks) fis
-- まだないなら、取り込んで伸びる。
| otherwise = s : loop k (succ i) (reg $ s + s) (IS.insert fi is) fks (tail fis)
where
fi = head fis -- 次に加入する味
fk = head fks -- 次に離脱する味
modBase = 1000000007
reg x = mod x modBase
Submission Info
| Submission Time | |
|---|---|
| Task | D - サプリメント |
| User | joetheshootingst |
| Language | Haskell (GHC 8.8.3) |
| Score | 100 |
| Code Size | 1510 Byte |
| Status | AC |
| Exec Time | 137 ms |
| Memory | 37024 KiB |
Compile Error
Loaded package environment from /home/contestant/.ghc/x86_64-linux-8.8.3/environments/default
Judge Result
| Set Name | Sample | Subtask1 | Subtask2 | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 30 / 30 | 70 / 70 | ||||||
| Status |
|
|
|
| Set Name | Test Cases |
|---|---|
| Sample | subtask0-sample01.txt, subtask0-sample02.txt |
| Subtask1 | subtask0-sample01.txt, subtask0-sample02.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt |
| Subtask2 | subtask0-sample01.txt, subtask0-sample02.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt, subtask2-01.txt, subtask2-02.txt, subtask2-03.txt, subtask2-04.txt, subtask2-05.txt, subtask2-06.txt, subtask2-07.txt, subtask2-08.txt, subtask2-09.txt, subtask2-10.txt, subtask2-11.txt, subtask2-12.txt, subtask2-13.txt, subtask2-14.txt, subtask2-15.txt, subtask2-16.txt, subtask2-17.txt, subtask2-18.txt, subtask2-19.txt, subtask2-20.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| subtask0-sample01.txt | AC | 5 ms | 3624 KiB |
| subtask0-sample02.txt | AC | 1 ms | 3616 KiB |
| subtask1-01.txt | AC | 6 ms | 5088 KiB |
| subtask1-02.txt | AC | 3 ms | 5124 KiB |
| subtask1-03.txt | AC | 6 ms | 5064 KiB |
| subtask1-04.txt | AC | 8 ms | 5452 KiB |
| subtask1-05.txt | AC | 8 ms | 5340 KiB |
| subtask1-06.txt | AC | 7 ms | 5376 KiB |
| subtask1-07.txt | AC | 11 ms | 5580 KiB |
| subtask1-08.txt | AC | 12 ms | 5712 KiB |
| subtask1-09.txt | AC | 14 ms | 5912 KiB |
| subtask1-10.txt | AC | 11 ms | 5884 KiB |
| subtask1-11.txt | AC | 9 ms | 5816 KiB |
| subtask1-12.txt | AC | 10 ms | 6044 KiB |
| subtask1-13.txt | AC | 10 ms | 5936 KiB |
| subtask1-14.txt | AC | 11 ms | 6392 KiB |
| subtask1-15.txt | AC | 10 ms | 6008 KiB |
| subtask1-16.txt | AC | 10 ms | 6212 KiB |
| subtask1-17.txt | AC | 12 ms | 6212 KiB |
| subtask1-18.txt | AC | 8 ms | 5888 KiB |
| subtask1-19.txt | AC | 10 ms | 5932 KiB |
| subtask1-20.txt | AC | 8 ms | 6016 KiB |
| subtask2-01.txt | AC | 32 ms | 10760 KiB |
| subtask2-02.txt | AC | 56 ms | 17868 KiB |
| subtask2-03.txt | AC | 84 ms | 25924 KiB |
| subtask2-04.txt | AC | 87 ms | 31848 KiB |
| subtask2-05.txt | AC | 105 ms | 36628 KiB |
| subtask2-06.txt | AC | 105 ms | 34260 KiB |
| subtask2-07.txt | AC | 103 ms | 34244 KiB |
| subtask2-08.txt | AC | 105 ms | 35268 KiB |
| subtask2-09.txt | AC | 108 ms | 35272 KiB |
| subtask2-10.txt | AC | 136 ms | 35288 KiB |
| subtask2-11.txt | AC | 107 ms | 35216 KiB |
| subtask2-12.txt | AC | 135 ms | 35276 KiB |
| subtask2-13.txt | AC | 137 ms | 35168 KiB |
| subtask2-14.txt | AC | 115 ms | 35280 KiB |
| subtask2-15.txt | AC | 114 ms | 37024 KiB |
| subtask2-16.txt | AC | 114 ms | 35332 KiB |
| subtask2-17.txt | AC | 136 ms | 35168 KiB |
| subtask2-18.txt | AC | 110 ms | 36816 KiB |
| subtask2-19.txt | AC | 115 ms | 35372 KiB |
| subtask2-20.txt | AC | 110 ms | 36960 KiB |