zoukankan      html  css  js  c++  java
  • 题解-CF1205E

    这题完全体现了我的 数学推导 能力有多差。


    中间还被 alpha 教育了,我不会算这个复杂度/kk

    [O(sum_{i=1}^{n} sum_{j|i}sum_{k|frac{i}{j}}1)=O(nlog^2n) ]


    还是考虑拆平方的期望,我们发现即为 (sum_{i,j}f(i)f(j)),其中 (f(t)) 代表有一个长度为 (t) 的 border。于是我们想要计算的是每两个 border 有几个串有这么长的 border。每个 border 对应一个 period,而每个 period 即对应唯一的一个长度为 (n) 的串。所以我们可以把 border 转换为 period。

    period 的性质即为每个点 (s[t]=s[t+i]),所以我们不妨把相同的点连边,最后连通块的数量即为一个不确定的值,设为 (c),那么贡献即为 (k^c)

    结论:(c=max(gcd(i,j),i+j-n))

    第一个部分即为弱周期引理,第二个部分感性理解一下(画个图)就能发现。

    根据一些等价我们得到下面的式子。(上面是字符串和图论的部分,下面就全是数学推导了)

    [ans imes k^n=sum_{i=1}^{n-1}sum_{j=1}^{n-1}k^{max{gcd(i,j), i+j-n}} ]

    然后有一个不太能扩展的 (O(nlog^2n)) 做法。

    考虑枚举 (gcd(i,j))(i+j),然后计算同时满足 (i,j) 组数。

    [sum_{s=2}^{2n-2}sum_{d|s}sum_{i=1}^{n-1}sum_{j=1}^{n-1}[gcd(i,j)=d][i+j=s]\ =sum_{s=2}^{2n-2}sum_{d|s}sum_{i=1}^{n-1}[gcd(i,s-i)=d]\ =sum_{s=2}^{2n-2}sum_{d|s}sum_{i=1}^{[frac{n-1}{d}]}[gcd(i,frac{s}{d}-i)=1]\ =sum_{s=2}^{2n-2}sum_{d|s}sum_{i|frac{s}{d}}mu(i)sum_{j=ik}1 ]

    然后上面的式子有一个缺陷,就是 (i,j) 的范围没有表示。

    [1le ile n-1\ 1le s-ile n-1\ Rightarrow s+1-nle ile s-1\ ]

    然后令 (a=max{1,frac{s}{d}-[frac{n-1}{d}]},b=min{frac{[n-1]}{d},frac{s}{d}-1}),有最终的式子

    [sum_{s=2}^{2n-2}sum_{d|s}sum_{i|frac{s}{d}}mu(i)([frac{b}{i}]-[frac{a-1}{i}]) ]

    还有一个常见的 (O(nlog{n})) 算法和一个 (O(n)) 算法。看懂了但是不想写了(咕咕有空就补),可以在下面的题解里看到。

    reference

    木xx木大的 luogu 题解

  • 相关阅读:
    CF432D Prefixes and Suffixes
    CF126B Password
    如何实现输入历史记录功能
    python工作中总结
    今 天看到我十年前的一篇技术文章,想到不知不觉学编程十多年了,,
    现在互联网好多bug 想到都烦
    【图论】割点
    【DP】【P1941】【NOIP2014D1T3】飞扬的小鸟
    【线段树】【P3740】 [HAOI2014]贴海报
    【单调队列】【P1714】 切蛋糕
  • 原文地址:https://www.cnblogs.com/zcr-blog/p/15013395.html
Copyright © 2011-2022 走看看