B. String LCM
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Let's define a multiplication operation between a string aa and a positive integer xx: a⋅xa⋅x is the string that is a result of writing xx copies of aa one after another. For example, "abc" ⋅ 2 =⋅ 2 = "abcabc", "a" ⋅ 5 =⋅ 5 = "aaaaa".
A string aa is divisible by another string bb if there exists an integer xx such that b⋅x=ab⋅x=a. For example, "abababab" is divisible by "ab", but is not divisible by "ababab" or "aa".
LCM of two strings ss and tt (defined as LCM(s,t)LCM(s,t)) is the shortest non-empty string that is divisible by both ss and tt.
You are given two strings ss and tt. Find LCM(s,t)LCM(s,t) or report that it does not exist. It can be shown that if LCM(s,t)LCM(s,t) exists, it is unique.
Input
The first line contains one integer qq (1≤q≤20001≤q≤2000) — the number of test cases.
Each test case consists of two lines, containing strings ss and tt (1≤|s|,|t|≤201≤|s|,|t|≤20). Each character in each of these strings is either 'a' or 'b'.
Output
For each test case, print LCM(s,t)LCM(s,t) if it exists; otherwise, print -1. It can be shown that if LCM(s,t)LCM(s,t) exists, it is unique.
Example
input
Copy
3
baba
ba
aa
aaa
aba
ab
output
Copy
baba
aaaaaa
-1
Note
In the first test case, "baba" = "baba" ⋅ 1 =⋅ 1 = "ba" ⋅ 2⋅ 2.
In the second test case, "aaaaaa" = "aa" ⋅ 3 =⋅ 3 = "aaa" ⋅ 2⋅ 2.
这题本来基础想法是一个个比,直到相同,但是这个思路是用验证的方式,
找到最小公倍数
假设最小单元一样,
再组合成一个字符串
如果两个字符串相同
那么就是可行的
输出一个即可
不同就输出-1
看代码
#include<bits/stdc++.h>
int gcd(int a,int b)
{
if(a%b==0)
return b;
else
return gcd(b,a%b);
}
using namespace std;
int main()
{
int t;
cin>>t;
string a;
string b;
while(t--)
{
string str1="",str2="";
cin>>a>>b;
int g=gcd(a.length(),b.length());
int u,v;
u=a.length();
v=b.length();
int c=u*v/g;
for(int i=0;i<c/u;i++)
str1+=a;
for(int i=0;i<c/v;i++)
str2+=b;
if(str1==str2)
cout<<str1<<endl;
else
cout<<"-1"<<endl;
}
}