1 条题解

  • 0
    @ 2026-10-25 20:44:20

    思路

    每个前缀取最短非空Border得到最大proper周期,QQ须覆盖原前缀,不是最短完整重复节,答案用64位。

    参考程序(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n;string s;cin>>n>>s;vector<int>p(n),shortest(n+1);for(int i=1;i<n;i++){int j=p[i-1];while(j&&s[i]!=s[j])j=p[j-1];if(s[i]==s[j])j++;p[i]=j;}long long ans=0;for(int i=1;i<=n;i++)if(p[i-1]){int b=p[i-1];shortest[i]=shortest[b]?shortest[b]:b;if(shortest[i]*2<=i)ans+=i-shortest[i];}cout<<ans<<'\n';}
    
    • 1

    信息

    ID
    1517
    时间
    1000ms
    内存
    64MiB
    难度
    普及+
    标签
    递交数
    1
    已通过
    1
    上传者