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 |
|
|
| 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 |