算法
(数论、暴力)
注意到 ${\rm LCM}(s1, s2)$ 就是由 $x$ 个 $s1$ 或 $y$ 个 $s2$ 拼接而成
记 $len1 = s1$ 的长度,$len2 = s2$ 的长度, $g = {\rm lcm}(len1, len2)$,
$x = \frac{g}{len1}, y = \frac{g}{len2}$,
然后拼接 $x$ 个 $s1$ 和 $y$ 个 $s2$,若这两个字符串一样则直接输出,否则输出 -1
即可。
C++ 代码
#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::string;
int main() {
int t;
cin >> t;
while (t--) {
string s1, s2;
cin >> s1 >> s2;
int n = s1.size(), m = s2.size();
int l = std::lcm(n, m);
int x = l / n, y = l / m;
string t1, t2;
while (x--) t1 += s1;
while (y--) t2 += s2;
if (t1 != t2) cout << -1 << '\n';
else cout << t1 << '\n';
}
return 0;
}