Content

如果一个字符串 \(s\) 由若干个字符串 \(t\) 拼接而成,则我们说 \(s\) 能被 \(t\) 整除。定义 \(s_1,s_2\) 的最短公倍串为可以同时被 \(s_1,s_2\) 的最短非空字符串。给定 \(T\) 对字符串 \(s_1,s_2\),求出每对字符串的最短公倍串。

数据范围:\(T\in[1,2000],|s_1|,|s_2|\in[1,20]\)。

Solution

《记我用 1.81k 代码过了一道普及- 的题目》

由于数据范围小得可怜,我们可以先暴力求出 \(s_1,s_2\) 的所有非空子串,然后再判断两个字符串是否同时存在一个子串 \(s\),使得 \(s_1,s_2\) 都能够被 \(s\) 整除。设我们找出来的这个字符串为 \(s_0\),并设 \(s_1\) 由 \(a\) 个 \(s_0\) 拼成,\(s_2\) 由 \(b\) 个 \(s_0\) 拼接而成,那么只需要连续输出 \(\operatorname{lcm}(a,b)\) 个 \(s_0\) 就好了。

这种思路说起来容易,代码实现却不是那样简单。所以包括宏定义、头文件和快读在内,我打了 1.81k 的代码。

你可以去这里看到我和其他一些神仙的代码长度比较,由此可以看出我很菜qwq。

Code

string s1, s2, subs1[27], subs2[27], pos[27], ans;
int t, pos1[27], pos2[27], poscnt;
map<string, int> vis; inline int gcd(int a, int b) {return !b ? a : gcd(b, a % b);}
inline int lcm(int a, int b) {return a * b / gcd(a, b);} int main() {
//freopen(".in", "r", stdin);
//freopen(".out", "w", stdout);
t = Rint;
while(t--) {
F(i, 1, 20) subs1[i] = ""; F(i, 1, 20) subs2[i] = ""; F(i, 1, 20) pos[i] = "";
memset(pos1, 0, sizeof(pos1)), memset(pos2, 0, sizeof(pos2));
vis.clear(); poscnt = 0; ans = "";
cin >> s1 >> s2;
int len1 = s1.size(), len2 = s2.size();
F(i, 1, len1) subs1[i] = s1.substr(0, i);
F(i, 1, len2) subs2[i] = s2.substr(0, i);
F(i, 1, len1) {
if(len1 % i) continue;
string s = "";
F(j, 1, len1 / i) s += subs1[i];
if(s == s1) pos1[++pos1[0]] = len1 / i, pos[++poscnt] = subs1[i], vis[subs1[i]] = pos1[0];
}
F(i, 1, len2) {
if(len2 % i) continue;
string s = "";
F(j, 1, len2 / i) s += subs2[i];
if(s == s2 && vis[subs2[i]]) pos2[++pos2[0]] = len2 / i, ans = subs2[i];
}
if(ans == "") {puts("-1"); continue;}
F(i, 1, lcm(pos1[vis[ans]], pos2[pos2[0]])) cout << ans;
puts("");
}
return 0;
}

最新文章

  1. 多线程之GCD
  2. Ajax 提交session实效跳转到完整的登陆页面
  3. 【转】快速理解Kafka分布式消息队列框架
  4. UVA 10791 - Minimum Sum LCM(坑)
  5. CSS居中完全解决方案
  6. js弹出确认框,挺全
  7. automapper的简单用法
  8. 服务器部署_linuix下 一台nginx 多域名
  9. CentOS6.3安装VBoxAdditions
  10. CSS中定位position
  11. 使用Mina框架开发 QQ Android 客户端
  12. 自己动手用maven构建基于SSI的java EE应用
  13. vue初级学习--控制台创建vue项目
  14. 高可用的MongoDB集群
  15. elasticsearch x-pack
  16. 通过fromdata实现上传文件
  17. VUE 多页面配置(二)
  18. kvm虚拟化1
  19. Android 底部导航栏的xml
  20. 重装unbantu 问题集合,下载别人的代码运行问题集合

热门文章

  1. ICCV2021 | SOTR:使用transformer分割物体
  2. Kubernetes Deployment 最佳实践
  3. 如何在Docker容器中使用Arthas
  4. Bedtools genomecov 计算覆盖度
  5. 【Pathview web】通路映射可视化
  6. python—模拟生成双色球号
  7. Oracle-like 多条件过滤以及and or用法
  8. 修改Ubuntu中locale转中文为英文
  9. 【PS算法理论探讨一】 Photoshop中两个32位图像混合的计算公式(含不透明度和图层混合模式)。
  10. day08 外键字段的增删查改