看板 Prob_Solve 關於我們 聯絡資訊
如題,題目在中女中的OJ上(http://tcgs.tc.edu.tw:1218/ShowProblem?problemid=z033) 目前沒人通過且NPSC補完計畫上的程式碼也是會TLE,當年的紀錄也沒有隊伍AC。 題目的數字個數最多會有 1e6 個,雖然時限是 6s 但枚舉任意組的開頭和結尾形成的子區間判斷會吃TLE。 附個暴力法實作的 Code : https://www.codepile.net/pile/oVxp1RVO 想問一下這題有O(N^2)的暴力法外的其他作法嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.231.101.233 ※ 文章網址: https://www.ptt.cc/bbs/Prob_Solve/M.1555804210.A.0E4.html
sifmelcara: https://pastebin.com/2MAAqeQq 用了 merkle tree 04/21 11:08
sifmelcara: 做到 O(logN) 的時間更新"所有數字奇偶狀態的"的 hash 04/21 11:09
sifmelcara: 但這應該不是 intended solution... 坐等高手 04/21 11:10
longlongint: 題目的舉例我看不懂 為什麼吃掉1有算一種? 04/21 12:19
longlongint: 哦 原來數字是種類不是數量 04/21 12:20
longlongint: 用積分方式算[0,L] 的奇偶數, 相扣可以得到任意[L, 04/21 13:39
longlongint: R]的奇偶數,所以只統計相同奇偶數出現次數k算所有c( 04/21 13:39
longlongint: k,2)加起來是答案,樓上用 hash tree 加速做掉了? 04/21 13:39
GYLin: 這是國中題目 所以有國中數學的解法...? 坐等高手+1 04/21 23:46
LPH66: 就樓上的方法啦, 積分方式其實就是 prefix sum 而已 04/22 00:56
LPH66: 統計可以用例如 std::map 或 std::unordered_map 04/22 00:56
GYLin: 種類太多 感覺也只能hash了 04/22 02:33
GYLin: 不過hash要怎麼存才不會爆記憶體? 04/22 02:41
sifmelcara: 就…只存hash出的值,不存原本的值,祈禱不會碰撞 04/22 10:41
sifmelcara: 把10^6個數字hash到uint64_t,有碰撞產生的機率差不 04/22 10:43
sifmelcara: 多是 (10^6)^2 / 2^64 而已 (birthday attack) 04/22 10:44
GYLin: 剛剛用1e18+3這個prime modulo喇過了... 04/22 14:08
GYLin: 仔細想想 1e6種數字 裝到1e60的buckets 還會碰撞也太賽 04/22 14:09
GYLin: 講錯 1e18的buckets 04/22 14:10