Educational Codeforces Round 102 (Rated for Div. 2)B. String LCM
B. String LCM
题目分析
题意:比较两组字符串之间是否存在”“字符串最小公倍数”“, 如果存在就输出”“字符串最小公倍数”“, 不存在则输出-1
所谓“字符串最小公倍数”,这里举几个例子来理解一下定义:
-
ababaab
和abab
有“字符串最小公倍数”abababababab
-
aaaa
和aaa
有“字符串最小公倍数”aaaaaaaaaaaa
-
ababa
和aba
没有“字符串最小公倍数” -
ababa
和ab
没有“字符串最小公倍数”
所以,我们可以先按照“字符串最小公倍数”的长度,用他们自身来各自构造两个字符串的相等,如果构造的字符串相等,那么构造出来的两个字符串就是他们的“字符串最小公倍数”,如果不相等则就直接输出-1。
AC代码
#include<bits/stdc++.h>
using namespace std;
#define gcd(a, b) __gcd(a, b)
int t;
int main(){
ios::sync_with_stdio(false), cin.tie(0);
cin >> t;
while(t--){
string s, ss;
string str1 = "", str2 = "";
cin >> s >> ss;
int len1 = s.length(), len2 = ss.length();
int len = len1 * len2 / gcd(len1, len2); // 求长度的最小公倍数,最小公倍数和最大公因数的关系是很基础的数论知识
for(int i = 0; i < len / len1 ; i++) str1 += s;
for(int i = 0; i < len / len2 ; i++) str2 += ss;
if(str1 == str2) cout << str1 << endl;
else cout << "-1" << endl;
}
return 0;
}