#include<iostream>
using namespace std;
int gcd(int a,int b)
{
return b ? gcd(b,a%b) : a;
}
string find(string a) //查找 a 的最小循环子串
{
int len = a.size();
for(int i=1; i<=len; i++)
{
int flag = 0;
for(int j=0; j<len-i;)
{
if(a.substr(j,i) != a.substr(j+i,i))
{
flag = 1;
break;
}
else j += i;
}
if(!flag) return a.substr(0,i);
}
return a;
}
int main()
{
int t;
cin >> t;
while(t--)
{
string a,b;
cin >> a >> b;
string s1 = find(a), s2 = find(b);
//cout << s1 <<" "<< s2 << endl;
if(s1 == s2) //只有两循环子串相等时,才有lcm
{
int k1 = a.size()/s1.size(),k2 = b.size()/s2.size();
for(int i=0; i<k1*k2/gcd(k1,k2); i++)
cout << s1;
cout << endl;
}
else cout << "-1" << endl;
}
}
Educational Codeforces Round 102 (Rated for Div. 2) B. String LCM (字符串)
于 2021-01-15 11:17:27 首次发布