题意:给出一个字符串 t t ,求一个最短的字符串,使得 s s 中恰好包含个 t t 。
思路:
可以看出,个字符串
t
t
是有公共部分的,即的最长公共前后缀长度(意义等同于
kmp
k
m
p
算法中的
next
n
e
x
t
数组)。
由于数据范围极小,可以暴力求出
t
t
的最长公共前后缀,计作。
答案就是
k−1
k
−
1
个
l
l
加上一个。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf (1<<30)
#define maxn 50
int n,k;
char a[maxn+5];
void read(int& x) {
scanf("%d",&x);
}
int main() {
read(n);read(k);
scanf("%s",a+1);
int len=0;
for(int i=1;i<n;i++) {
for(int j=1;j<=i;j++) {
if(a[j]!=a[n-i+j]) goto END;
}
len=i;
END:;
}
for(int i=1;i<k;i++) {
for(int j=1;j<=n-len;j++) printf("%c",a[j]);
}
printf("%s",a+1);
return 0;
}