結果
問題 | No.615 集合に分けよう |
ユーザー |
|
提出日時 | 2020-10-20 01:51:47 |
言語 | Haskell (9.10.1) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 5,346 bytes |
コンパイル時間 | 1,079 ms |
コンパイル使用メモリ | 176,000 KB |
最終ジャッジ日時 | 2024-11-14 23:52:22 |
合計ジャッジ時間 | 2,134 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
Loaded package environment from /home/judge/.ghc/x86_64-linux-9.8.2/environments/default [1 of 2] Compiling Main ( Main.hs, Main.o ) Main.hs:79:24: error: [GHC-87543] Ambiguous occurrence ‘.<<.’. It could refer to either ‘Data.Bits..<<.’, imported from ‘Data.Bits’ at Main.hs:6:1-26, or ‘Main..<<.’, defined at Main.hs:43:1. | 79 | $ (x + 0x3fffffff) .<<. 31 .|. (y + 0x3fffffff) | ^^^^ Main.hs:82:15: error: [GHC-87543] Ambiguous occurrence ‘.>>.’. It could refer to either ‘Data.Bits..>>.’, imported from ‘Data.Bits’ at Main.hs:6:1-26, or ‘Main..>>.’, defined at Main.hs:47:1. | 82 | !x = xy .>>. 31 - 0x3fffffff | ^^^^ Main.hs:84:49: error: [GHC-87543] Ambiguous occurrence ‘.<<.’. It could refer to either ‘Data.Bits..<<.’, imported from ‘Data.Bits’ at Main.hs:6:1-26, or ‘Main..<<.’, defined at Main.hs:43:1. | 84 | encodeNonNegative64 (x, y) = unsafeCoerce $ x .<<. 31 .|. y | ^^^^ Main.hs:87:15: error: [GHC-87543] Ambiguous occurrence ‘.>>.’. It could refer to either ‘Data.Bits..>>.’, imported from ‘Data.Bits’ at Main.hs:6:1-26, or ‘Main..>>.’, defined at Main.hs:47:1. | 87 | !x = xy .>>. 31 | ^^^^ Main.hs:91:54: error: [GHC-87543] Ambiguous occurrence ‘.<<.’. It could refer to either ‘Data.Bits..<<.’, imported from ‘Data.Bits’ at Main.hs:6:1-26, or ‘Main..<<.’, defined at Main.hs:43:1. | 91 | encode64 (x, y, z) = unsafeCoerce $ ((x + 0xfffff) .<<. 21 .|. (y + 0xfffff)) .<<. 21 .|. (z + 0xfffff) | ^^^^ Main.hs:91:81: error: [GHC-87543] Ambiguous occurrence ‘.<<.’. It co
ソースコード
LANGUAGELANGUAGELANGUAGEimportControl.ArrowimportData.BitsimportqualifiedData.FoldableasFimportData.WordimportUnsafe.CoerceimportqualifiedData.ByteString.CharasBSCimportqualifiedData.Vector.Fusion.Stream.MonadicasVFSMimportqualifiedData.Vector.UnboxedasVUimportqualifiedData.Vector.Unboxed.MutableasVUMmain::IO()main = do[m, k] <- map read . words <$> getLinea <- parseM mlet a' = radixSortInt ab <- VUM.replicate (m - 1) (0 :: Int)rep (m - 1) $ \i -> VUM.unsafeWrite b i (a' VU.! (i + 1) - a' VU.! i)b' <- VU.unsafeFreeze blet c = radixSortInt b'print $ VU.sum $ VU.take (m - k) ctype Parser a = BSC8.ByteString -> Maybe (a, BSC8.ByteString)parseInt::ParserIntparseInt = fmap (second BSC8.tail) . BSC8.readIntparseM::Int->IOVUVectorIntparseM m = VU.unfoldrN m parseInt <$> BSC8.getLinebucketSortVU::Int->VUVectorInt->VUVectorIntbucketSortVU bucketSize= VU.concatMap (uncurry $ flip VU.replicate). VU.indexed. VU.unsafeAccumulate (+) (VU.replicate bucketSize 0). VU.map (, 1)INLINEinfixl 8 .<<., .>>.(.<<.)::Bitsb=>b->Int->b(.<<.) = unsafeShiftLINLINE(.>>.)::Bitsb=>b->Int->b(.>>.) = unsafeShiftRINLINEstream::Monadm=>Int->Int->VFSMStreammIntstream !l !r = VFSM.Stream step lwherestep x| x < r = return $ VFSM.Yield x (x + 1)| otherwise = return $ VFSM.DoneINLINEINLINErep::Monadm=>Int->Int->m()->m()rep n = flip VFSM.mapM_ (stream 0 n)INLINEclassWordEncodeawhereencode64::a->Word64decode64::Word64->aencodeNonNegative64::a->Word64encodeNonNegative64 = encode64decodeNonNegative64::Word64->adecodeNonNegative64 = decode64instanceWord64EncodeIntwhereencode64 x = unsafeCoerce $ x + 0x3fffffffffffffffdecode64 x = unsafeCoerce x - 0x3fffffffffffffffencodeNonNegative64 = unsafeCoercedecodeNonNegative64 = unsafeCoerceinstanceWord64EncodeIntIntwhereencode64 (x, y) = unsafeCoerce$ (x + 0x3fffffff) .<<. 31 .|. (y + 0x3fffffff)decode64 xy = unsafeCoerce (x, y)where!x = xy .>>. 31 - 0x3fffffff!y = (xy .&. 0x7fffffff) - 0x3fffffffencodeNonNegative64 (x, y) = unsafeCoerce $ x .<<. 31 .|. ydecodeNonNegative64 xy = unsafeCoerce (x, y)where!x = xy .>>. 31!y = xy .&. 0x7fffffffinstanceWord64EncodeIntIntIntwhereencode64 (x, y, z) = unsafeCoerce $ ((x + 0xfffff) .<<. 21 .|. (y + 0xfffff)) .<<. 21 .|. (z + 0xfffff)decode64 xyz = unsafeCoerce (x, y, z)where!x = xyz .>>. 42 - 0xfffff!y = (xyz .>>. 21 .&. 0x1fffff) - 0xfffff!z = xyz .&. 0x1fffff - 0xfffffencodeNonNegative64 (x, y, z) = unsafeCoerce $ (x .<<. 21 .|. y) .<<. 21 .|. zdecodeNonNegative64 xyz = unsafeCoerce (x, y, z)where!x = xyz .>>. 42!y = xyz .>>. 21 .&. 0x1fffff!z = xyz .&. 0x1fffffradixSortInt::VUVectorInt->VUVectorIntradixSortInt = unsafeCoerce . radixSort64 . unsafeCoerceradixSort64::VUVectorWord64->VUVectorWord64radixSort64 vword = F.foldl' step vword [0,16,32,48]wheremask k x = fromIntegral $ x .>>. k .&. 0xffffstep v k = VU.create $ dopref <- VU.unsafeThaw. VU.prescanl' (+) 0. VU.unsafeAccumulate (+) (VU.replicate 0x10000 0)$ VU.map ((, 1) . mask k) vres <- VUM.unsafeNew $ VU.length vVU.forM_ v $ \x -> dolet !masked = mask k xi <- VUM.unsafeRead pref maskedVUM.unsafeWrite pref masked $ i + 1VUM.unsafeWrite res i xreturn resINLINEradixSort::VUUnboxaWord64Encodea=>VUVectora->VUVectoraradixSort = VU.map decode64 . radixSort64 . VU.map encode64INLINEradixSortNonNegative::VUUnboxaWord64Encodea=>VUVectora->VUVectoraradixSortNonNegative= VU.map decodeNonNegative64 . radixSort64 . VU.map encodeNonNegative64INLINEradixSort32::VUVectorWord32->VUVectorWord32radixSort32 vec = F.foldl' step vec [0, 16]wheremask k x = fromIntegral $ x .>>. k .&. 0xffffstep v k = VU.create $ dopref <- VU.unsafeThaw. VU.prescanl' (+) 0. VU.unsafeAccumulate (+) (VU.replicate 0x10000 0)$ VU.map ((, 1) . mask k) vres <- VUM.unsafeNew $ VU.length vVU.forM_ v $ \x -> dolet !masked = mask k xi <- VUM.unsafeRead pref maskedVUM.unsafeWrite pref masked $ i + 1VUM.unsafeWrite res i xreturn resINLINEcompress::VUVectorInt->VUVectorIntcompress vec = VU.create $ domvec <- VUM.unsafeNew (VU.length vec)VU.mapM_ (\(i, x) -> VUM.unsafeWrite mvec (x .&. 0xffffffff) i). VU.postscanl' (\(!i, !x) y ->if x .>>. 32 == y .>>. 32then (i, y)else (i + 1, y)) (-1, -1). radixSortInt$ VU.imap (\i x -> x .<<. 32 .|. i) vecreturn mvecINLINE