CF1473B String LCM 题解
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;
}
CF1473B String LCM 题解的更多相关文章
- Educational Codeforces Round 102 (Rated for Div. 2) B. String LCM (构造,思维)
题意:给你两个字符串\(a\)和\(b\),找出它们的\(lcm\),即构造一个新的字符串\(c\),使得\(c\)可以由\(x\)个\(a\)得到,并且可以由\(y\)个\(b\)得到,输出\(c\ ...
- 洛谷 P1891 疯狂LCM 题解
原题链接 享受推式子的乐趣吧 数论真有趣! 庆祝:数论紫题第 \(3\) 道. \[\sum_{i=1}^n \operatorname{lcm}(i,n) \] \[= \sum_{i=1}^n \ ...
- CF1461A String Generation 题解
Content 构造一个仅由 a,b,c 三个字符组成,且最长回文子串长度不超过 \(k\) 的长度为 \(n\) 的字符串. 数据范围:数据组数 \(\leqslant 10\),\(1\leqsl ...
- 51NOD 2026:Gcd and Lcm——题解
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=2026 参考及推导:https://www.cnblogs.com/ivo ...
- 是男人就过八题A_A String Game题解
题意 给一个字符串\(s\),和\(n\)个子串\(t[i]\),两个人博弈,每次取出一个串\(t[i]\),在后面加入一个字符,保证新字符串仍然是\(s\)的子串,无法操作的人输. 分析 n个子串, ...
- CF1349A Orac and LCM 题解
题意分析 给出$n$个数,求这$n$个数两两的最小公倍数的最大公约数 思路分析 通过分析样例可以发现,如果要成为这$n$个数两两的最小公倍数的公约数,至少要是这$n$个数中$n-1$个数的约数,否则就 ...
- Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal 题解(思维+逆序对)
题目链接 题目大意 给你一个长度为n的字符串,可以交换相邻两个元素,使得这个字符串翻转,求最少多少种次数改变 题目思路 如果要求数组排序所需要的冒泡次数,那其实就是逆序对 这个也差不多,但是如果是相同 ...
- CF1579A Casimir's String Solitaire 题解
Content 给定一个仅包含 A.B.C 三种字符的字符串 \(s\),有如下两种操作: 删除字符串中的恰好一个 A 和恰好一个 B. 删除字符串中的恰好一个 B 和恰好一个 C. 求是否能够把字符 ...
- ACM-ICPC2018南京赛区 Mediocre String Problem
Mediocre String Problem 题解: 很容易想到将第一个串反过来,然后对于s串的每个位置可以求出t的前缀和它匹配了多少个(EXKMP 或者 二分+hash). 然后剩下的就是要处理以 ...
随机推荐
- 架构师必备:巧用Canal实现异步、解耦的架构
本文介绍如何应用Canal实现异步.解耦的架构,后续有空再写文章分析Canal原理和源代码. Canal简介 Canal是用来获取数据库变更的中间件. 伪装自己为MySQL从库,拉取主库binlog并 ...
- 【.NET 与树莓派】MPD 的 Mini-API 封装
在前面的水文中,一方面,老周向各位同学介绍了通过 TCP 连接来访问 MPD 服务:另一方面,也简单演示了 ASP.NET Core 的"极简 API"(Mini API).本篇老 ...
- uniapp中vuex的基本使用
1. 创建一个uniapp项目 2. 在项目目录下用npm安装 vuex npm install vuex --save 3. 在项目根目录下创建 store文件夹,在store文件夹中创建 inde ...
- CF1555F Good Graph
有以下引理: 不存在两个合法环,他们存在公共边. 证明:公共边边权为 \(z\),第一个环除去公共边为 \(x\),第二个环除去公共边为 \(y\). 则有 \(x \oplus z = 1\) \( ...
- Codeforces 856D - Masha and Cactus(树链剖分优化 dp)
题面传送门 题意: 给你一棵 \(n\) 个顶点的树和 \(m\) 条带权值的附加边 你要选择一些附加边加入原树中使其成为一个仙人掌(每个点最多属于 \(1\) 个简单环) 求你选择的附加边权值之和的 ...
- BZOJ3971 [WF2013]Матрёшка
*XXXIV. BZOJ3971 [WF2013]Матрёшка 摘自 DP 做题记录 II 例题 XXXIV. 仍然是神仙区间 DP. 直接设状态 \(f_{i,j}\) 表示区间 \([i,j] ...
- Matlab 调用 Python 脚本
Matlab 调用 Python 脚本 最近尝试在 Matlab 环境中调用 Python 脚本,这里总结下碰到的几个问题. 1. Python 模块加载 在 Matlab 函数中,想要将 Pytho ...
- R语言与医学统计图形-【34】绘制统计表格
表的绘制,主要是临床三线表. 1.tableone包 #install.packages('tableone') library(tableone) set.seed(2017) age <- ...
- Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议
Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议 索引 索引是一种存储引擎快速查询记录的一种数据结构. 注意 MYSQL一次查询只能使用一个索引 ...
- Shell 变量嵌套
实现:eval 1 a="indv1" 2 indv1="Sus1" 3 4 eval tmp='$'$a 5 echo $tmp //这里 echo 返回值为 ...