[Agc028A]Two Abbreviations_数学
Two Abbreviations
题目链接:https://atcoder.jp/contests/agc028/tasks/agc028_a
数据范围:略。
题解:
题目中的位置非常不利于思考,我们令字符串的存储是从$0$开始。
也就是说$S$的第$i$个字符相当于$(i - 1)\cdot \frac{L}{N}$
手玩一下就会发现,题目中的$-1$,仅仅可能是两个串的字符应该出现在同一个位置,但是他俩不一样。
而且,如果没有这样的不满足的位置,$L=lcm(N,M)$即可,这是显然的,因为每个字符间隔都在成倍增长。
故此,暴力用$gcd$判一下即可。
代码:
#include <bits/stdc++.h> #define N 3000010 using namespace std; char s[N], t[N]; int main() { int n, m; cin >> n >> m ; scanf("%s%s", s + 1, t + 1); int d = __gcd(n, m); int n_ = n / d, m_ = m / d; for (int i = 0; i < d; i ++ ) { int k1 = i * n_ + 1, k2 = i * m_ + 1; if (s[k1] != t[k2]) { puts("-1"); return 0; } } cout << (long long)n_ * m_ * d << endl ; return 0; }
| 欢迎来原网站坐坐! >原文链接<