• Many Equal Substrings CodeForces


    题目大意

    题目看样例也能猜到就是输出最短的循环串。

    吐槽

    明明是div3第一题为啥子还会用到kmp的知识?

    解法

    这个题仔细看发现是求最长可去除的后缀,也就是说去除跟下一个相同的字符串还能连接起来。这个不就是next数组的功能吗?最长公共前后缀。

    公式:len-next[len]

    我们把前k-1个字符串只输出前面的部分最后加上一个完整的字符串即可

    完整代码

    #include <bits/stdc++.h>
    using namespace std;
    char a[500];
    int nex[500];
    int maxn=-1;
    void get()
    {
      int j=0;
      for(int i=2;i<=strlen(a+1);i++)
      {
        while(j&&a[i]!=a[j+1])
        j=nex[j];
        if(a[i]==a[j+1])
        j++;
        nex[i]=j;
      }
    }
    int main()
    {
      ios::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
      int n,t;
      cin>>n>>t;
      cin>>a+1;
      get();
      int ans=strlen(a+1)-nex[strlen(a+1)];
      for(int i=0;i<t-1;i++)
      for(int j=1;j<=ans;j++)
      cout<<a[j];
      cout<<a+1;
    }
    
  • 相关阅读:
    fork 函数 和vfork 函数的区别
    进程时间
    输出子进程状态
    二维字符串数组字典排序
    括号匹配
    队列实现二叉树层序遍历
    二叉查找树
    分块查找
    JS中的className含义
    Java打印温度转换表
  • 原文地址:https://www.cnblogs.com/baccano-acmer/p/10040855.html
Copyright © 2020-2023  润新知