Submission #9414815


Source Code Expand

import           Control.Monad
import qualified Data.ByteString.Char8 as BS
import           Data.Maybe

readInt = fst . fromJust . BS.readInt
readIntList = map readInt . BS.words
getInt = readInt <$> BS.getLine
getIntList = readIntList <$> BS.getLine

{-
 - Next lexicographical permutation algorithm
 - by Project Nayuki, 2016. Public domain.
 - https://www.nayuki.io/page/next-lexicographical-permutation-algorithm
 -
 - Computes the next lexicographical permutation of the specified finite
 - list of numbers.
 - Returns Nothing if the argument is already the highest permutation.
 -}
nextPermutation :: Ord a => [a] -> Maybe [a]
nextPermutation xs =
  let
    len = length xs
    -- Reverse of longest non-increasing suffix
    revSuffix = findPrefix (reverse xs)
    suffixLen = length revSuffix
    prefixMinusPivot = take (len - suffixLen - 1) xs
    pivot = xs !! (len - suffixLen - 1)
    suffixHead = takeWhile (<= pivot) revSuffix
    newPivot : suffixTail = drop (length suffixHead) revSuffix
    newSuffix = suffixHead ++ (pivot : suffixTail)
  in
    if suffixLen == len
    then Nothing
    else Just (prefixMinusPivot ++ (newPivot : newSuffix))
  where
    findPrefix [] = []
    findPrefix (x:xs) =
      x : (if xs /= [] && x <= head xs then findPrefix xs else [])

main = do
  _ <- getInt
  [p', q'] <- replicateM 2 getIntList
  let (p, q) = if p' <= q' then (p', q') else (q', p')
  print $ solve p q 0
  where
    solve p q m | p == q = m
                | otherwise = let p' = (fromJust . nextPermutation) p
                              in solve p' q (m + 1)

Submission Info

Submission Time
Task C - Count Order
User unnohideyuki
Language Haskell (GHC 7.10.3)
Score 300
Code Size 1629 Byte
Status AC
Exec Time 14 ms
Memory 892 KiB

Judge Result

Set Name All Sample
Score / Max Score 300 / 300 0 / 0
Status
AC × 13
AC × 3
Set Name Test Cases
All sample_01.txt, sample_02.txt, sample_03.txt, testcase_0.txt, testcase_1.txt, testcase_2.txt, testcase_3.txt, testcase_4.txt, testcase_5.txt, testcase_6.txt, testcase_7.txt, testcase_8.txt, testcase_9.txt
Sample sample_01.txt, sample_02.txt, sample_03.txt
Case Name Status Exec Time Memory
sample_01.txt AC 2 ms 380 KiB
sample_02.txt AC 7 ms 892 KiB
sample_03.txt AC 2 ms 380 KiB
testcase_0.txt AC 2 ms 892 KiB
testcase_1.txt AC 2 ms 508 KiB
testcase_2.txt AC 2 ms 380 KiB
testcase_3.txt AC 8 ms 892 KiB
testcase_4.txt AC 1 ms 380 KiB
testcase_5.txt AC 1 ms 380 KiB
testcase_6.txt AC 1 ms 380 KiB
testcase_7.txt AC 14 ms 892 KiB
testcase_8.txt AC 2 ms 380 KiB
testcase_9.txt AC 1 ms 380 KiB