Submission #18626717
Source Code Expand
{-# LANGUAGE DatatypeContexts #-}
import Control.Exception (assert)
import Control.Monad
import Control.Monad.Primitive
import qualified Control.Monad.ST as ST
import qualified Data.Array.IO as IO
import qualified Data.Array.ST as ST
import qualified Data.Array.Unboxed as A
import Data.Bits
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.Foldable
import Data.List
import qualified Data.Map.Strict as Map
import Data.Maybe
import qualified Data.Sequence as Seq
import qualified Data.Set as Set
import qualified Data.Vector as VB
import qualified Data.Vector.Mutable as VBM
import qualified Data.Vector.Unboxed as V
import Data.Vector.Unboxed.Base
import qualified Data.Vector.Unboxed.Mutable as VM
import Debug.Trace
readInt = fst . fromJust . BS.readInt
readIntList = map readInt . BS.words
getInt = readInt <$> BS.getLine
getIntList = readIntList <$> BS.getLine
getIntVec n = V.unfoldrN n (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine
readInteger = fst . fromJust . BS.readInteger
readIntegerList = map readInteger . BS.words
getInteger = readInteger <$> BS.getLine
getIntegerList = readIntegerList <$> BS.getLine
inf :: Int
inf = 50*50+1
main = do
[h, w] <- getIntList
g <- VB.fromList <$> replicateM h BS.getLine
arr <- IO.newArray ((1,1),(h,w)) inf :: IO (IO.IOUArray (Int, Int) Int)
let getC y x = (g VB.! (y-1)) `BS.index` (x-1)
bsf :: Seq.Seq (Int, Int, Int) -> IO ()
bsf q | Seq.null q = return ()
| otherwise = do
let (y, x, ct) Seq.:< q' = Seq.viewl q
t <- IO.readArray arr (y, x)
if t <= ct
then bsf q'
else do IO.writeArray arr (y, x) ct
let qn = q' Seq.>< (Seq.fromList [(y', x', ct+1)
| (dy, dx) <- [(0,-1),(0,1),(-1,0),(1,0)]
, let (y', x') = (y + dy, x + dx)
, y' >= 1, y' <= h, x' >= 1, x' <= w
, getC y' x' == '.'])
bsf qn
countWhite y x res | y > h = res
| x > w = countWhite (y+1) 1 res
| otherwise = let c = getC y x
res' | c == '.' = res + 1
| otherwise = res
in countWhite y (x+1) res'
nw = countWhite 1 1 0
bsf (Seq.fromList [(1,1,1)])
d <- IO.readArray arr (h, w)
if d >= inf
then print (-1)
else print (nw - d)
Submission Info
Submission Time
2020-12-07 17:39:03+0900
Task
D - Grid Repainting
User
unnohideyuki
Language
Haskell (GHC 8.8.3)
Score
400
Code Size
3004 Byte
Status
AC
Exec Time
10 ms
Memory
5444 KiB
Compile Error
Loaded package environment from /home/contestant/.ghc/x86_64-linux-8.8.3/environments/default
Main.hs:1:14: warning:
-XDatatypeContexts is deprecated: It was widely considered a misfeature, and has been removed from the Haskell language.
|
1 | {-# LANGUAGE DatatypeContexts #-}
| ^^^^^^^^^^^^^^^^
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
400 / 400
Status
Set Name
Test Cases
Sample
s1.txt, s2.txt
All
in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, s1.txt, s2.txt
Case Name
Status
Exec Time
Memory
in01.txt
AC
6 ms
4264 KiB
in02.txt
AC
2 ms
4108 KiB
in03.txt
AC
4 ms
4200 KiB
in04.txt
AC
2 ms
4220 KiB
in05.txt
AC
2 ms
4104 KiB
in06.txt
AC
2 ms
4380 KiB
in07.txt
AC
3 ms
4276 KiB
in08.txt
AC
5 ms
4020 KiB
in09.txt
AC
2 ms
4176 KiB
in10.txt
AC
3 ms
4288 KiB
in11.txt
AC
2 ms
4408 KiB
in12.txt
AC
2 ms
4136 KiB
in13.txt
AC
2 ms
4184 KiB
in14.txt
AC
2 ms
4200 KiB
in15.txt
AC
6 ms
5312 KiB
in16.txt
AC
10 ms
5260 KiB
in17.txt
AC
6 ms
5444 KiB
in18.txt
AC
9 ms
5400 KiB
s1.txt
AC
2 ms
4268 KiB
s2.txt
AC
4 ms
4432 KiB