zoukankan      html  css  js  c++  java
  • CF 1025 E : Expected Value Again

    Link

    简要题意:给字符集大小和串长,求border个数的平方的期望

    (nle 1e5)

    基本的转化就不说了,现在需要对一对(i,j)求他们都是(border)的方案数。

    (i)是一个(border) (Leftrightarrow) (n-i)是一个循环节(可以超出)

    同时我们可以知道(f_i(s)=1)的概率是(k^{-i})

    现在考虑(n-i=i_1, n-j=j_2)

    枚举(i,j)的答案是(k^{max (i_1+j_1-n,gcd (i_1,j_1))-n}​)

    proof:

    首先考虑(i_1+j_1 le n​)的情况,这种情况下显然可以通过(+j​)之后每次相减做到(gcd (i_1,j_1)​)

    现在考虑(i_1+j_1>n)的时候。不妨设(i_1>j_1),同时我们有(i<j)(j < i_1)

    现在相当于要统计联通块的个数(t)

    将所有点按照(mod gcd(i_1,j_1)​)分组

    我们还不难发现,每个点的度数最大是(2)。考虑一下度数正好都是(2)的时候会发生什么。

    首先是(+i_1)的边将原图分成了一堆链。之后每个点相当于是在(i_1/gcd(i_1,j_1))的环上走(j_1/gcd(i_1,j_1))

    因为步长和环长互质,所以这一定是一个大环。

    不难发现如果两条边都向左的点度数都是2,那这个图就是一个大环了。

    于是我们统计有多少个(x mod gcd(i_1,j_1)),满足这个分组的店中有至少一个点度数不满即可。

    考虑(>n-i_1)的点,这些点没有向右连的边,向连的边我们只用关注(j_1)的边,如果有则(i_1)的边也一定存在。

    考虑(le j_1)的点才没有向左连的边,我们考虑这样的区间((i,j_1])

    讨论一下:

    • 如果有(j_1-ige gcd(i_1,j_1))则每个(x)都被漏掉了,直接计算边数就能算出连通块个数是(i_1+j_1-n)

    • 如果(j_1-ile gcd(i_1,j_1))则恰好有(gcd(i,j)-(j_1-i))条边是成环了,算出来(t=gcd (i_1,j_1))

    综上,答案是(k^{max (i_1+j_1-n,gcd (i_1,j_1))-n})

    这个可以在(nlog ^2n)的时间做出来

  • 相关阅读:
    ant build打包
    在JAVA中如何获取当前源文件名以及代码的行号
    react以组件为中心的代码分割和懒加载
    java中针对 try和finally一些总结
    JS强制关闭浏览器页签并且不提示关闭信息
    由[].slice.call()引发的思考
    JS类型判断
    nginx的location配置
    DBCP连接池
    java/Servlet
  • 原文地址:https://www.cnblogs.com/weiyanpeng/p/11394497.html
Copyright © 2011-2022 走看看