Submission #48030855
Source Code Expand
import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.List
main :: IO ()
main = do
[n,k] <- bsGetLnInts
xys <- replicateM n bsGetLnInts
let ans = abc330f n k xys
print ans
bsGetLnInts :: IO [Int]
bsGetLnInts = unfoldr (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine
abc330f :: Int -> Int -> [[Int]] -> Int
abc330f n k xys = sat
where
xs = sort $ map head xys
ys = sort $ map (!! 1) xys
(_unsat, sat) = binarySearch (\r -> cost xs r + cost ys r <= k) (-1) 1_000_000_001
cost as s = sum $ map f as
where
l = (!! pred n) $ merge as $ map (subtract s) as
f a
| a <= l = l - a
| l + s <= a = a - l - s
| True = 0
merge xxs@(x:xs) yys@(y:ys) =
case compare x y of
LT -> x : merge xs yys
GT -> y : merge xxs ys
EQ -> x : y : merge xs ys
merge xs [] = xs
merge [] ys = ys
-- @gotoki_no_joe
binarySearch :: (Int -> Bool) -> Int -> Int -> (Int, Int)
binarySearch prop unsat sat = loop unsat sat
where
loop a b
| ende = (a, b)
| prop m = loop a m
| True = loop m b
where
ende = a == m || b == m
m = div (a + b) 2
{-
解説
https://atcoder.jp/contests/abc330/editorial/7774
を写経する。
「数値列 x1, ..., xN を閉区間 [L,L+S] に移動させる最小コストを求めよ」という問題が解けると、
正方形の大きさ S に対するコストが導けるので、二分探索で答えが得られる、という後半は同じ。
「」の問題は、Lの選択がミソで、それは x1, ..., xN, x1-S, ..., xN-S の中央値ふたつの間、なのでN個めの値でよい。
(なんで?ある一点に集めるときには、重心が最適になるのは直観的にわかる。引っ張り合いをして安定するのがそこだから。
それに幅ができたようなものなのか。)
これは、マージソートのマージを使うとO(N)で計算できる。
-}
Submission Info
| Submission Time | |
|---|---|
| Task | F - Minimize Bounding Square |
| User | joetheshootingst |
| Language | Haskell (GHC 9.4.5) |
| Score | 525 |
| Code Size | 2072 Byte |
| Status | AC |
| Exec Time | 1526 ms |
| Memory | 105880 KiB |
Compile Error
app/Main.hs:31:1: warning: [-Wmissing-signatures]
Top-level binding with no type signature:
merge :: Ord a => [a] -> [a] -> [a]
|
31 | merge xxs@(x:xs) yys@(y:ys) =
| ^^^^^
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 525 / 525 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt, sample_02.txt, sample_03.txt |
| All | hack_01.txt, hack_02.txt, hack_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, test_70.txt, test_71.txt, test_72.txt, test_73.txt, test_74.txt, test_75.txt, test_76.txt, test_77.txt, test_78.txt, test_79.txt, test_80.txt, test_81.txt, test_82.txt, test_83.txt, test_84.txt, test_85.txt, test_86.txt, test_87.txt, test_88.txt, test_89.txt, test_90.txt, test_91.txt, test_92.txt, test_93.txt, test_94.txt, test_95.txt, test_96.txt, test_97.txt, test_98.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| hack_01.txt | AC | 635 ms | 93216 KiB |
| hack_02.txt | AC | 595 ms | 93368 KiB |
| hack_03.txt | AC | 605 ms | 93232 KiB |
| sample_01.txt | AC | 2 ms | 6948 KiB |
| sample_02.txt | AC | 2 ms | 6680 KiB |
| sample_03.txt | AC | 2 ms | 6980 KiB |
| test_01.txt | AC | 2 ms | 6748 KiB |
| test_02.txt | AC | 2 ms | 6716 KiB |
| test_03.txt | AC | 2 ms | 6704 KiB |
| test_04.txt | AC | 2 ms | 6932 KiB |
| test_05.txt | AC | 2 ms | 6892 KiB |
| test_06.txt | AC | 2 ms | 6888 KiB |
| test_07.txt | AC | 2 ms | 6844 KiB |
| test_08.txt | AC | 2 ms | 6888 KiB |
| test_09.txt | AC | 2 ms | 6864 KiB |
| test_10.txt | AC | 2 ms | 6844 KiB |
| test_11.txt | AC | 2 ms | 6892 KiB |
| test_12.txt | AC | 1 ms | 6672 KiB |
| test_13.txt | AC | 2 ms | 6848 KiB |
| test_14.txt | AC | 2 ms | 6912 KiB |
| test_15.txt | AC | 2 ms | 6864 KiB |
| test_16.txt | AC | 2 ms | 6868 KiB |
| test_17.txt | AC | 2 ms | 6876 KiB |
| test_18.txt | AC | 2 ms | 6864 KiB |
| test_19.txt | AC | 2 ms | 6872 KiB |
| test_20.txt | AC | 1 ms | 6896 KiB |
| test_21.txt | AC | 1 ms | 6896 KiB |
| test_22.txt | AC | 2 ms | 6672 KiB |
| test_23.txt | AC | 2 ms | 6948 KiB |
| test_24.txt | AC | 2 ms | 6904 KiB |
| test_25.txt | AC | 2 ms | 6904 KiB |
| test_26.txt | AC | 2 ms | 6692 KiB |
| test_27.txt | AC | 1366 ms | 103884 KiB |
| test_28.txt | AC | 21 ms | 12924 KiB |
| test_29.txt | AC | 242 ms | 36256 KiB |
| test_30.txt | AC | 1355 ms | 103860 KiB |
| test_31.txt | AC | 1305 ms | 102692 KiB |
| test_32.txt | AC | 1486 ms | 103588 KiB |
| test_33.txt | AC | 1526 ms | 103792 KiB |
| test_34.txt | AC | 713 ms | 57984 KiB |
| test_35.txt | AC | 1396 ms | 103660 KiB |
| test_36.txt | AC | 1316 ms | 103864 KiB |
| test_37.txt | AC | 966 ms | 105036 KiB |
| test_38.txt | AC | 835 ms | 94868 KiB |
| test_39.txt | AC | 1225 ms | 103888 KiB |
| test_40.txt | AC | 202 ms | 34088 KiB |
| test_41.txt | AC | 51 ms | 19176 KiB |
| test_42.txt | AC | 1195 ms | 103888 KiB |
| test_43.txt | AC | 1315 ms | 103500 KiB |
| test_44.txt | AC | 91 ms | 21144 KiB |
| test_45.txt | AC | 1325 ms | 103880 KiB |
| test_46.txt | AC | 885 ms | 105880 KiB |
| test_47.txt | AC | 81 ms | 22328 KiB |
| test_48.txt | AC | 1335 ms | 103668 KiB |
| test_49.txt | AC | 905 ms | 94848 KiB |
| test_50.txt | AC | 71 ms | 20588 KiB |
| test_51.txt | AC | 1396 ms | 103792 KiB |
| test_52.txt | AC | 1295 ms | 103716 KiB |
| test_53.txt | AC | 955 ms | 91680 KiB |
| test_54.txt | AC | 1376 ms | 103884 KiB |
| test_55.txt | AC | 975 ms | 93840 KiB |
| test_56.txt | AC | 1456 ms | 100996 KiB |
| test_57.txt | AC | 1406 ms | 103888 KiB |
| test_58.txt | AC | 543 ms | 55956 KiB |
| test_59.txt | AC | 915 ms | 99976 KiB |
| test_60.txt | AC | 1376 ms | 103852 KiB |
| test_61.txt | AC | 895 ms | 96484 KiB |
| test_62.txt | AC | 1065 ms | 101624 KiB |
| test_63.txt | AC | 1256 ms | 103888 KiB |
| test_64.txt | AC | 985 ms | 98264 KiB |
| test_65.txt | AC | 463 ms | 54672 KiB |
| test_66.txt | AC | 1316 ms | 103660 KiB |
| test_67.txt | AC | 563 ms | 57968 KiB |
| test_68.txt | AC | 463 ms | 51848 KiB |
| test_69.txt | AC | 1346 ms | 103880 KiB |
| test_70.txt | AC | 865 ms | 99940 KiB |
| test_71.txt | AC | 835 ms | 100992 KiB |
| test_72.txt | AC | 1435 ms | 103804 KiB |
| test_73.txt | AC | 202 ms | 31252 KiB |
| test_74.txt | AC | 71 ms | 20200 KiB |
| test_75.txt | AC | 536 ms | 103264 KiB |
| test_76.txt | AC | 526 ms | 103268 KiB |
| test_77.txt | AC | 605 ms | 93256 KiB |
| test_78.txt | AC | 625 ms | 93300 KiB |
| test_79.txt | AC | 615 ms | 93108 KiB |
| test_80.txt | AC | 615 ms | 93264 KiB |
| test_81.txt | AC | 635 ms | 93100 KiB |
| test_82.txt | AC | 645 ms | 93324 KiB |
| test_83.txt | AC | 926 ms | 104960 KiB |
| test_84.txt | AC | 886 ms | 104848 KiB |
| test_85.txt | AC | 835 ms | 104916 KiB |
| test_86.txt | AC | 765 ms | 104916 KiB |
| test_87.txt | AC | 895 ms | 102868 KiB |
| test_88.txt | AC | 935 ms | 104896 KiB |
| test_89.txt | AC | 915 ms | 104912 KiB |
| test_90.txt | AC | 866 ms | 102828 KiB |
| test_91.txt | AC | 896 ms | 104800 KiB |
| test_92.txt | AC | 926 ms | 103872 KiB |
| test_93.txt | AC | 916 ms | 103880 KiB |
| test_94.txt | AC | 996 ms | 103932 KiB |
| test_95.txt | AC | 906 ms | 104904 KiB |
| test_96.txt | AC | 1025 ms | 103888 KiB |
| test_97.txt | AC | 815 ms | 103892 KiB |
| test_98.txt | AC | 895 ms | 104836 KiB |