[心得] CF576C Mo's algorithm on non-DS problem

看板Prob_Solve (計算數學 Problem Solving)作者 (拍玄)時間5年前 (2019/03/29 00:18), 編輯推噓2(201)
留言3則, 3人參與, 5年前最新討論串1/1
題幹:平面給 N 個點,輸出一條 circuit 走過所有點一次,而且長度小於等於 2.5e9 條件 (x, y) in [0, 1e6] X [0, 1e6], N <= 1e6 作法: 我一開始看到這題的時候真的用莫隊下去切,也沒有分析一下複雜度,就這樣踩到雷 我的莫隊是這樣 implement 的: key = make_pair(x / SQRT, y) sort points by key 分析一下為何錯誤: SQRT = sqrt(1e6) = 1000 莫隊把 x 軸分成約 SQRT 塊,每一塊的 cost 右界移動最多是 1e6 ** 塊跟塊之間的轉移 cost 是 1e6(右界指標要回來)** 光右界就能輕鬆造出 2e9 左界移動每次幅度大可以到 SQRT (外加 O(N) 均攤,倒不是很關鍵) 左屆總計也差不多 1e9 剛好吃 WA 如果交錯右屆可以磨掉 ** 之間的 cost 也就是: key = make_pair(x / SQRT, x / SQRT % 2 ? y : -y) sort point by key 偷看了一下測資,的確沒有 cost 是大於 2e9 ,很接近倒是有 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.216.110 ※ 文章網址: https://www.ptt.cc/bbs/Prob_Solve/M.1553789929.A.B3C.html

03/29 11:09, 5年前 , 1F
這是 Eucldean TSP 嗎?
03/29 11:09, 1F

03/29 13:10, 5年前 , 2F
Nope 是用莫隊想法
03/29 13:10, 2F

03/30 07:55, 5年前 , 3F
前幾天也剛好看到這題XD
03/30 07:55, 3F
文章代碼(AID): #1SdFFfiy (Prob_Solve)
文章代碼(AID): #1SdFFfiy (Prob_Solve)