​传送门​

两个字符串 a a a和 b b b,把 a a a看成比较短的那个,长度分别为 n 1 , n 2 n_1,n_2 n1,n2

那么毫无疑问,答案必然是 x a xa xa,其中 x x x未知

因为只有这样能被 a a a整除

而且有 x ∗ n 1 < = n 1 ∗ n 2 x*n_1<=n_1*n_2 x∗n1<=n1∗n2

如果 n 1 ∗ n 2 n_1*n_2 n1∗n2凑不成就不可能凑成

因为每次添加一个 a a a都相当于循环节往后移动一位, n 1 ∗ n 2 n_1*n_2 n1∗n2移动了 n 2 n_2 n2位

再移动下去,就又变成最开始的情况,所以无解。

所以暴力枚举 x x x判断即可

#include <bits/stdc++.h>
using namespace std;
int id,n1,n2;
string a,b;
char c[10009];
bool isok()
{
if( id%n2!=0 ) return false;
int now = 0;
for(int i=1;i<=id;i++)
{
if( b[now]!=c[i] ) return false;
now++;
if( now==n2 ) now = 0;
}
return true;
}
int main()
{
int t; cin >> t;
while( t-- )
{
cin >> a >> b;
if( a.length()>b.length() ) swap(a,b);
n1 = a.length(), n2 = b.length();
id = 0; int flag = 0;
while( id<=n1*n2 )
{
for(int i=0;i<n1;i++) c[++id] = a[i];
if( isok() ) { flag = 1; break; }
}
if( flag==0 ) { printf("-1\n"); continue; }
for(int i=1;i<=id;i++) printf("%c",c[i]);
printf("\n");
}
}