zoukankan      html  css  js  c++  java
  • 【arc077f】AtCoder Regular Contest 077 F

    题意

    给你一个形如"SS"的串S,以及一个函数(f(x))(x)是一个形如"SS"的字符串,(f(x))也是一个形如"SS"的字符串。
    (x)(f(x))的一个前缀,并且要让(f(x))尽量短。

    问在(f^{10^{100}}(S))中,[L,R]中所有字符的出现次数。

    [字符集为小写字母,|S|<=100000,1<=L<=R<=1e18 ]

    解法

    可以发现的是S只用考虑前一半,因为进行了许多次变换,已经后一半不在1e18的范围内。

    首先我们第一步应该做的是去观察这个函数的变化规律。

    通过最初几步的打表,
    我们可以发现,设T是S的border,那么f(S)=ST

    S->ST->STS->STSST->....

    到这里已经相当明显。
    这个变化呈现的是一个类似于斐波那契数列的变换。

    所以我们可以模拟这个过程。

    由于通过斐波那契的变换只需log(1e18)次就可以超过1e18的长度,
    时间复杂度是(O(log^2))的。

    border的求法相当简单,
    我们给串做一次KMP,然后Brd=n-Fail[n]

  • 相关阅读:
    第07组 Beta冲刺(1/5)
    软工实践个人总结
    SDN大作业
    第08组 Beta版本演示
    2019 SDN上机第7次作业
    第08组 Beta冲刺(5/5)
    第08组 Beta冲刺(4/5)
    第08组 Beta冲刺(3/5)
    第08组 Beta冲刺(2/5)
    2019 SDN上机第6次作业
  • 原文地址:https://www.cnblogs.com/hiweibolu/p/8480736.html
Copyright © 2011-2022 走看看