CF 1092 A. Many Equal Substrings

http://codeforces.com/contest/1029/problem/A

求出最后一个字母的最长前缀与后缀,cal_next(),然后输出之后的串m-1。

#include<bits/stdc++.h>
#define maxn 200005
using namespace std;
char s[maxn];
int nex[maxn];
int main()
{
    int n,m;
    cin>>n>>m;
    scanf("%s",s);
    int k=-1;
    nex[0]=-1;
    for(int i=1;s[i]!='\0';i++)
    {
        while(k>-1&&s[k+1]!=s[i])
            k=nex[k];
        if(s[k+1]==s[i]) k++;
        nex[i]=k;
    }
   /// for(int i=0;i<n;i++)
       /// cout<<nex[i]<<" ";

   /// int index=-1;
    ///for(int i=0;i<n;i++)
       /// index=max(index,nex[i]);
       /// cout<<index;


        printf("%s",s);

           for(int j=1;j<m;j++)
                {
                    for(int i=nex[n-1]+1;i<n;i++)
                    printf("%c",s[i]);
                }
    return 0;

猜你喜欢

转载自blog.csdn.net/qq_38924883/article/details/82048353