Submission #19425645


Source Code Expand

{-# LANGUAGE BangPatterns     #-}
{-# 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 = 10^18

main = do
  [n, k] <- getIntList
  as <- getIntList
  fs <- getIntList

  let as' = reverse $ quickSortList as
      fs' = quickSortList fs

      canAchieve [] [] k' x = k' >= 0
      canAchieve (a:as) (f:fs) k' x | k' < 0 = False
                                    | otherwise = let a' = x `div` f
                                                      d = max 0 (a - a')
                                                   in canAchieve as fs (k' - d) x

      ans = bisectLeft (canAchieve as' fs' k) True 0 (10^12+1)

  print ans


bisectLeft :: Ord a => (Int -> a) -> a -> Int -> Int -> Int
bisectLeft f x lo hi
  | lo >= hi  = lo
  | f mid < x = bisectLeft f x (mid+1) hi
  | otherwise = bisectLeft f x lo mid
  where
    mid = lo + (hi - lo) `div` 2

-- quickSortVec from https://gist.github.com/kazu-yamamoto/3051375
quickSortList :: (Ord a, VM.Unbox a) => [a] -> [a]
quickSortList xs = ST.runST $ do
    arr <- V.thaw $ V.fromList xs
    let beg = 0
        end = VM.length arr - 1
    quickSortVec beg end arr
    V.toList <$> V.freeze arr

quickSortVec l u arr
  | l >= u    = return ()
  | otherwise = do
      VM.unsafeSwap arr l ((u+l)`div`2)
      t <- VM.unsafeRead arr l
      let i = l
          j = u + 1
      nj <- loopVec t u i j arr
      VM.unsafeSwap arr l nj
      quickSortVec l (nj-1) arr
      quickSortVec (nj+1) u arr

loopVec !t !u !i !j arr = do
  ni <- doWhile i (+1)         (< t)
  nj <- doWhile j (subtract 1) (> t)
  if ni > nj
    then return nj
    else do VM.unsafeSwap arr ni nj
            loopVec t u ni nj arr
              where
                {-# INLINE doWhile #-}
                doWhile k op p
                  | nk > u    = return nk
                  | otherwise = do
                      x <- VM.unsafeRead arr nk
                      if p x then
                        doWhile nk op p
                        else
                        return nk
                        where
                          nk = op k

Submission Info

Submission Time
Task E - Gluttony
User unnohideyuki
Language Haskell (GHC 8.8.3)
Score 500
Code Size 3528 Byte
Status AC
Exec Time 284 ms
Memory 45160 KiB

Compile Error

Loaded package environment from /home/contestant/.ghc/x86_64-linux-8.8.3/environments/default

Main.hs:2:14: warning:
    -XDatatypeContexts is deprecated: It was widely considered a misfeature, and has been removed from the Haskell language.
  |
2 | {-# LANGUAGE DatatypeContexts #-}
  |              ^^^^^^^^^^^^^^^^

Judge Result

Set Name Sample Subtask1
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 38
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
Subtask1 sample_01.txt, sample_02.txt, sample_03.txt, sub1_01.txt, sub1_02.txt, sub1_03.txt, sub1_04.txt, sub1_05.txt, sub1_06.txt, sub1_07.txt, sub1_08.txt, sub1_09.txt, sub1_10.txt, sub1_11.txt, sub1_12.txt, sub1_13.txt, sub1_14.txt, sub1_15.txt, sub1_16.txt, sub1_17.txt, sub1_18.txt, sub1_19.txt, sub1_20.txt, sub1_21.txt, sub1_22.txt, sub1_23.txt, sub1_24.txt, sub1_25.txt, sub1_26.txt, sub1_27.txt, sub1_28.txt, sub1_29.txt, sub1_30.txt, sub1_31.txt, sub1_32.txt, sub1_33.txt, sub1_34.txt, sub1_35.txt
Case Name Status Exec Time Memory
sample_01.txt AC 10 ms 3876 KiB
sample_02.txt AC 2 ms 3744 KiB
sample_03.txt AC 2 ms 3884 KiB
sub1_01.txt AC 182 ms 44836 KiB
sub1_02.txt AC 10 ms 5528 KiB
sub1_03.txt AC 50 ms 17068 KiB
sub1_04.txt AC 20 ms 6940 KiB
sub1_05.txt AC 133 ms 22228 KiB
sub1_06.txt AC 167 ms 26172 KiB
sub1_07.txt AC 11 ms 5164 KiB
sub1_08.txt AC 230 ms 37020 KiB
sub1_09.txt AC 80 ms 12364 KiB
sub1_10.txt AC 136 ms 22080 KiB
sub1_11.txt AC 152 ms 27160 KiB
sub1_12.txt AC 83 ms 14320 KiB
sub1_13.txt AC 39 ms 8756 KiB
sub1_14.txt AC 129 ms 21396 KiB
sub1_15.txt AC 95 ms 13520 KiB
sub1_16.txt AC 160 ms 26308 KiB
sub1_17.txt AC 132 ms 21140 KiB
sub1_18.txt AC 253 ms 44732 KiB
sub1_19.txt AC 236 ms 45160 KiB
sub1_20.txt AC 221 ms 44664 KiB
sub1_21.txt AC 229 ms 44560 KiB
sub1_22.txt AC 241 ms 44664 KiB
sub1_23.txt AC 252 ms 44660 KiB
sub1_24.txt AC 227 ms 44672 KiB
sub1_25.txt AC 247 ms 44700 KiB
sub1_26.txt AC 280 ms 44672 KiB
sub1_27.txt AC 277 ms 44596 KiB
sub1_28.txt AC 284 ms 43644 KiB
sub1_29.txt AC 260 ms 44588 KiB
sub1_30.txt AC 267 ms 44600 KiB
sub1_31.txt AC 264 ms 43596 KiB
sub1_32.txt AC 284 ms 43732 KiB
sub1_33.txt AC 276 ms 43928 KiB
sub1_34.txt AC 9 ms 5172 KiB
sub1_35.txt AC 131 ms 22352 KiB