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;