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 题解

  • 相关阅读:
    React 16 源码瞎几把解读 【前戏】 为啥组件外面非得包个标签?
    nodejs 使用redis 管理session
    nodejs 优雅的连接 mysql
    mongodb 学习笔记 3 --- 查询
    mongodb 学习笔记 2 --- 修改器
    mongodb 学习笔记--- 基础知识
    看jquery3.3.1学js类型判断的技巧
    FIS3 大白话【一】
    Flutter 插件开发:以微信SDK为例
    最新Android面试题整理,收藏下吧值得拥有!
  • 原文地址:https://www.cnblogs.com/zcr-blog/p/15013395.html
Copyright © 2011-2022 走看看