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
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
AC × 2
AC × 20
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