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;