提出 #3927679


ソースコード 拡げる

{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE Unsafe #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE FlexibleContexts #-}

import Data.Bits
import Data.List
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Char8 as BSL
import Data.IntMap.Strict (IntMap)
import qualified Data.IntMap.Strict as IMS
import Data.IntSet (IntSet)
import qualified Data.IntSet as IS
import qualified Data.Sequence as Seq
import Data.Sequence (Seq)
import qualified Data.Array.IArray as A
import qualified Data.Array.MArray.Safe as A
import qualified Data.Array.MArray as A
import Data.Array (Array)
import Data.Array.Unboxed (UArray)
import Data.Array.IArray (IArray)
import Data.Array.MArray.Safe (MArray)
import Data.Array.IO.Safe (IOArray, IOUArray)
import Data.Array.ST.Safe (STArray, STUArray, runSTArray, runSTUArray)
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as VU
import qualified Data.Vector.Unboxed.Mutable as VUM
import Control.Monad
import Control.Monad.ST
-- import Control.Monad.ST.Safe
import Control.Applicative
import Data.Maybe
import Data.Tuple
import Data.Ord
import Control.Monad.State.Strict
import Data.Int
import System.IO
import Data.Function
import Control.Monad.Primitive
import qualified Data.Vector.Primitive.Mutable as VPM
import qualified Data.Vector.Generic.Mutable as VGM
import Data.STRef

main :: IO ()
main = do
  input1 <- BS.getLine
  let len_xs = BS.length input1
      xs = VU.unfoldrN len_xs BS.uncons input1
  input2 <- BS.getLine
  let len_ys = BS.length input2
      ys = VU.unfoldrN len_ys BS.uncons input2
  print $ if len_xs <= len_ys then query xs ys else query ys xs

{-# INLINE query #-}
query :: VU.Vector Char -> VU.Vector Char -> Int
query xs ys = (\(mbef,acc) -> mbef `max` VU.maximum acc)
  $ VU.foldl' (\(mbef, acc) y ->
                 (mbef `max` VU.maximum acc,
                  VU.zipWith
                  (\a x -> if x==y then a+1 else 0)
                  (VU.cons 0 acc) xs))
  (0, VU.replicate (VU.length xs) 0) ys 

提出情報

提出日時
問題 B - 共通部分文字列
ユーザ gksato
言語 Haskell (GHC 7.10.3)
得点 20
コード長 2245 Byte
結果 AC
実行時間 94 ms
メモリ 3324 KiB

ジャッジ結果

セット名 set01 set02 set03 set04 set05 set06 set07 set08 set09 set10
得点 / 配点 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2
結果
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
セット名 テストケース
set01 data1
set02 data2
set03 data3
set04 data4
set05 data5
set06 data6
set07 data7
set08 data8
set09 data9
set10 data10
ケース名 結果 実行時間 メモリ
data1 AC 2 ms 508 KiB
data10 AC 83 ms 3196 KiB
data2 AC 2 ms 508 KiB
data3 AC 2 ms 508 KiB
data4 AC 94 ms 3324 KiB
data5 AC 91 ms 3324 KiB
data6 AC 85 ms 3324 KiB
data7 AC 93 ms 3196 KiB
data8 AC 92 ms 3324 KiB
data9 AC 91 ms 3324 KiB