警示后人,如果你后4个点T了
查看原帖
警示后人,如果你后4个点T了
261932
qpdk777楼主2022/8/4 22:25

如果对于 aia_i 的每一项,都以 gcdgcd 为间隔遍历 aja_j 求和,时间复杂度为 O(n2l2gcd)O(\frac{n^2l^2}{gcd}) ,会超时。

应当首先把 aja_j 的隔 gcdgcd 项和求出来(只需要求出前 gcdgcd 项为首的隔 gcdgcd 项和即可),然后在遍历 aia_i 时,直接把刚刚求好的和拿过来乘就可以了。

这样求和的循环外层是 O(gcd)O(gcd) ,内层是 O(ljgcd)O( \frac{l_j}{gcd}) ,求和总计是 O(l)O(l) ,总的复杂度只有 O(n2l)O(n^2l) ,可以AC。

2022/8/4 22:25
加载中...