LOJ#2476. 「2018 集训队互测 Day 3」蒜头的奖杯
给定n个长度为6的序列\(A,B,C,D,E,F\),求:
首先令\(D,E,F\)卷上\(\mu\)变成\(D',E',F'\),莫反一下:
则我们令\(A'_i=\sum_{i|d}A_i\),B和C做同样的变换。
则就变成:
那么这就是经典三元环计数了,1e5下边有m=2625630这么多条边。
复杂度是\(O(m\sqrt m)\)的,但是他能过。
然后是正解。
设\(f(A)=A*\mu,g(A)_i=\sum_{i|x}A_x\),则:
考虑对于每一个d我们单独做,记\(P_i=f(E)_{id},Q_i=f(F)_{id},R_i=g(C)_{id},S_i=A_{id},T_i=B_{id},W_i=D_{id},m=\frac nd\)。
则可以得到:\(\sum_{\gcd(x,y)=1,xy\le m}P_xQ_yR_{xy}\sum_{ix\le m}\sum_{jy\le m}S_{ix}T_{jy}W_{\gcd(ix,jy)}\)。
考虑先看后面的式子:
可以注意到,后面这一部分完全跟y没关系!也就是说我们只要知道x即可,我们考虑枚举x和y中比较小的那一个,则取值范围只有根号,可以预处理一发,就把后面的那一部分处理出来,然后枚举y,再枚举y的倍数求个和即可。
好,看看单次复杂度是多少。
首先分析x的预处理的部分,每一次预处理都要花\(O(m\log \log m)\)的时间,x会枚举\(\sqrt m\)次,因此复杂度是\(O(m\sqrt m\log \log m)\)。
考虑每一个y出现了多少次,对于小于等于根号m的,出现了y次,这一部分复杂度是:\(\sum_{i=1}^{\sqrt m}i\frac mi=m\sqrt m\)。
对于大于根号m的,出现了\(\frac mi\)次,那复杂度就是:\(\sum_{i=\sqrt m}^m(\frac mi)^2\),积分一下可以得到:\(m^2(\frac 1{\sqrt m}-\frac 1m)=m\sqrt m\)。
因此这一部分不足以成为复杂度瓶颈。
然后对于所有d求个和,复杂度是:\(\sum_{d=1}^n(\frac nd)^{1.5}\log\log n=n^{1.5}\log\log n\)。