A. Many Equal Substrings(字符串) Codeforces Round #506 (Div. 3)
原题链接: https://codeforces.com/problemset/problem/1029/A

 测试样例
Input
3 4
aba
Output
ababababa
Input
3 2
cat
Output
catcat
题意: 给你一个长度为 n n n字符串 s s s,你需要去构建一个长度最小的字符串使得它的子串等于 s s s的数量为 k k k。
解题思路: 我们想想,如果我们直接将字符串 s s s拼接 k k k次是不是就满足了,可题中要求长度最小,所以我们要尽可能的利用字符串 s s s的前后缀对称性,既然其中字符重复利用,如果前缀等于后缀的长度越多,我们利用的也就越多,直接将前缀后面的字符拼接在后面即可。故我们可以去寻找前后缀相等的最长长度,这可以利用string类的substr()方法来截取子串。OK,具体看代码。
AC代码
/*
*邮箱:unique_powerhouse@qq.com
*blog:https://me.csdn.net/hzf0701
*注:文章若有任何问题请私信我或评论区留言,谢谢支持。
*
*/
#include<bits/stdc++.h>//POJ不支持
 
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=a;i>=n;i--)
 
using namespace std;
 
const int inf=0x3f3f3f3f;//无穷大。
const int maxn=1e5;//限定值。
typedef long long ll;
 
string s;
int n,k;
int main(){
	while(cin>>n>>k){
		int result;
		cin>>s;
		rep(i,0,n-2){
			if(s.substr(0,i+1)==s.substr(n-i-1)){
				result=i+1;
			}
		}
		cout<<s;
		rep(i,1,k-1){
			cout<<s.substr(result);
		}
	}
	return 0;
}

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号