将k个字符串直接拼起来必然是一个好串,但是要最短可以观察两个字符串直接拼起来可不可以去除掉一些共同的字符串,这些共同的字符串就是前后缀相等,即一个字符串的前缀与它相同长度的后缀相等,在这个前提下,两个字符串拼起来相等的部分可以去除,可以直接使用暴力求最长的相等前后缀
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 1010;
string str;
ll n, m,ans;
int main()
{
    cin>>str;
    cin>>m;
    n=str.size();
    int t = 0;
    for(int len=1;len<n;len++)
    {
        string pre=str.substr(0,len);
        string suf=str.substr(n-len);
        if(pre==suf)ans=len;
    }
    printf("%lld\n", n + 1ll * (m - 1) * (n - ans));
    return 0;
}
str = input()
m = int(input())
n = len(str)
ans = 0
for length in range(1, n):
    pre = str[:length]
    suf = str[n - length:]
    if pre == suf:
        ans = length
print(n + (m - 1) * (n - ans))
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        long  m = scanner.nextInt();
        int n = str.length();
        long  ans = 0;
        for (int length = 1; length < n; length++) {
            String pre = str.substring(0, length);
            String suf = str.substring(n - length);
            if (pre.equals(suf)) {
                ans = length;
            }
        }
        System.out.println(n + (long)(m - 1) * (n - ans));
    }
}
        小红有一串字符s,如果一个串中至少有k个子串与s相同,那么这个串就是s的好串。
例如,如果s是"aa",k=3,那么”aaabcaabc“是好串。
现在小红想知道,对于给定的s和k,s是最短好串多少。
第一行输入一个长度不超过103,且只有小写 字符串s。
第二行输入一个整数k代表好串要求的子串 2≤k≤1e9
在一行输出一个整数,代表s的最短
输入
abc
2
输出
6
说明 最短好串是abcabc
输入
aabcaa
2 
输出
10
最短好串是aabcaabcaa