CodeForces - 1029A Many Equal Substrings
You are given a string t consisting of n lowercase Latin letters and an integer number k.
Let’s define a substring of some string s with indices from l to r as s[l…r].
Your task is to construct such string s of minimum possible length that there are exactly k positions i such that s[i…i+n−1]=t. In other words, your task is to construct such string s of minimum possible length that there are exactly k substrings of s equal to t.
It is guaranteed that the answer is always unique.
Input
The first line of the input contains two integers n and k (1≤n,k≤50) — the length of the string t and the number of substrings.
The second line of the input contains the string t consisting of exactly n lowercase Latin letters.
Output
Print such string s of minimum possible length that there are exactly k substrings of s equal to t.
It is guaranteed that the answer is always unique.
大致题意就是要把他给的字符串重复k遍,其中可以把前一个字符串的后缀当做后一个字符串的前缀。可以直接暴力怼过去,唯一的难度是找出后缀。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n,k,x=0;
char s[2505];
cin>>n>>k>>s;
for(int i=1;i<n;i++)
{
if(s[i]==s[0])
{
int k=1,flag=1;
for(int j=i+1;j<n;j++,k++)
{
if(s[j]!=s[k])
flag=0;
}
if(flag)
{
x=n-i;
break;
}
}
}
cout<<s;
while(--k)
{
for(int i=x;i<n;i++)
cout<<s[i];
}
cout<<endl;
}
这里可以用substr函数来求前后缀或者输出后缀,非常方便,可以试一试优化代码。