[问题] NPSC 2017 国中组初赛 D.吃点心

楼主: fatcat8127 (胖胖猫)   2019-04-21 07:50:07
如题,题目在中女中的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)的暴力法外的其他作法吗?
作者: sifmelcara (sifmelcara)   2019-04-21 11:08:00
https://pastebin.com/2MAAqeQq 用了 merkle tree做到 O(logN) 的时间更新"所有数字奇偶状态的"的 hash但这应该不是 intended solution... 坐等高手
作者: longlongint (华哥尔)   2019-04-21 12:19:00
题目的举例我看不懂 为什么吃掉1有算一种?哦 原来数字是种类不是数量用积分方式算[0,L] 的奇偶数, 相扣可以得到任意[L,R]的奇偶数,所以只统计相同奇偶数出现次数k算所有c(k,2)加起来是答案,楼上用 hash tree 加速做掉了?
作者: GYLin (Lynx)   2019-04-21 23:46:00
这是国中题目 所以有国中数学的解法...? 坐等高手+1
作者: LPH66 (-6.2598534e+18f)   2019-04-22 00:56:00
就楼上的方法啦, 积分方式其实就是 prefix sum 而已统计可以用例如 std::map 或 std::unordered_map
作者: GYLin (Lynx)   2019-04-22 02:33:00
种类太多 感觉也只能hash了不过hash要怎么存才不会爆内存?
作者: sifmelcara (sifmelcara)   2019-04-22 10:41:00
就…只存hash出的值,不存原本的值,祈祷不会碰撞把10^6个数字hash到uint64_t,有碰撞产生的机率差不多是 (10^6)^2 / 2^64 而已 (birthday attack)
作者: GYLin (Lynx)   2019-04-22 14:08:00
刚刚用1e18+3这个prime modulo喇过了...仔细想想 1e6种数字 装到1e60的buckets 还会碰撞也太赛讲错 1e18的buckets

Links booklink

Contact Us: admin [ a t ] ucptt.com