codeforce题目

codeforce 102 (div 2)

B题

在这里插入图片描述
这题首先是求两个字符串的最小公倍数lcm,从样例分析来看,字符串的最小公倍数大小必须是两个字符串的大小的公倍数。因此可以先求出两字符串长度的最小公倍数,注意一下这里的最小公倍数的求法:
lcm(s, t) = s.size ()*t.size()/ __gcd(s.size(), t.size())
注意这里的__gcd(int a, int b)函数是万能头文件**<bits/stdc++.h>**中的,直接用就好了。
求出了lcm之后,我们就可以利用最小公倍数的性质,即它必须是这两个数的倍数,通过一个字符串来求另一个字符串,并对比利用公倍数求出来的另外一个字符串是否与题给的另外一个字符串相等。我一直在思考的一个问题是到底要是在什么情况下才输出“-1”呢?其实想一想也很简单,就是如果利用公倍数求出来的另外一个字符串与题给的另外一个字符串不相等,则说明这两个字符串的最小公倍数确实不存在,此时,我们可以输出“-1”,其他情况下可以利用最小公倍数大小以及其中任意一个字符串求出需要累加的另外一个字符串通过将其累加来计算。

#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);	cin.tie(0);		cout.tie(0);

using namespace std;

int a[1000];

//3
//baba
//ba
//baba

//aa
//aaa
//aaaaaa

//aba
//ab
//-1
string mul(string s, int t){
    string res = "";
    while(t--)
        res = res + s;
    return res;
}
int main() {
    int T, cs = 0;
    cin >> T;
    while(T--){
        string s, t;
        cin >> s >> t;        
        int g = __gcd(s.size(), t.size());
        int lcm = s.size()*t.size()/g;
        string ans = mul(s, lcm / s.size());
        if(ans != mul(t, lcm/ t.size()))
           ans = "-1";
        cout << ans << "\n";
    }

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追梦_赤子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值