Loading

Educational Codeforces Round 102 (Rated for Div. 2)B. String LCM

B. String LCM

题目分析

题意:比较两组字符串之间是否存在”“字符串最小公倍数”“, 如果存在就输出”“字符串最小公倍数”“, 不存在则输出-1

所谓“字符串最小公倍数”,这里举几个例子来理解一下定义:

  • ababaababab有“字符串最小公倍数”abababababab

  • aaaaaaa有“字符串最小公倍数”aaaaaaaaaaaa

  • ababaaba没有“字符串最小公倍数”

  • ababaab没有“字符串最小公倍数”

所以,我们可以先按照“字符串最小公倍数”的长度,用他们自身来各自构造两个字符串的相等,如果构造的字符串相等,那么构造出来的两个字符串就是他们的“字符串最小公倍数”,如果不相等则就直接输出-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;
}
posted @ 2021-01-15 01:04  Frank_Ou  阅读(93)  评论(0编辑  收藏  举报