Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- using namespace std;
- const long long MOD = 1e9 + 7, N = 2e3 + 7;
- long long n, n1, m1, n2, m2, kx1, kx2, kY1, ky2, x1, Y1, x2, y2,lx1,lx2,lY1,ly2,rx1,rx2,rY1,ry2,per_y, per_x,answ;
- int gcd(int a, int b) {
- if (b == 0)
- return a;
- else
- return gcd(b, a % b);
- }
- int main()
- {
- cin >> n1 >> m1;
- vector<vector<char>> a1;
- a1.resize(n1);
- for (int i = 0; i < n1; i++) {
- a1[i].resize(m1);
- }
- for (int y = 0; y < m1; y++) {
- for (int x = 0; x < n1; x++) {
- cin >> a1[x][y];
- }
- }
- cin >> n2 >> m2;
- vector<vector<char>> a2;
- a2.resize(n2);
- for (int i = 0; i < n2; i++) {
- a2[i].resize(m2);
- }
- for (int y = 0; y < m2; y++) {
- for (int x = 0; x < n2; x++) {
- cin >> a2[x][y];
- }
- }
- kx1 = n2 / gcd(n1, n2);
- kx2 = n1 / gcd(n1, n2);
- kY1 = m2 / gcd(m1, m2);
- ky2 = m1 / gcd(m1, m2);
- Y1 = 0;
- y2 = 0;
- answ = 0;
- while (Y1 <= m1 - 1 && y2 <= m2 - 1) {
- lY1 = Y1 * kY1;
- rY1 = (Y1 + 1) * kY1 - 1;
- ly2 = y2 * ky2;
- ry2 = (y2 + 1) * ky2 - 1;
- per_y = min(rY1, ry2) - max(lY1, ly2) + 1;
- x1 = 0;
- x2 = 0;
- while (x1 <= n1 - 1 && x2 <= n2 - 1) {
- lx1 = x1 * kx1;
- rx1 = (x1 + 1) * kx1 - 1;
- lx2 = x2 * kx2;
- rx2 = (x2 + 1) * kx2 - 1;
- per_x = min(rx1, rx2) - max(lx1, lx2) + 1;
- if (a1[x1][Y1] == a2[x2][y2]) {
- answ += per_y * per_x;
- }
- if (rx1 <= rx2) {
- x1++;
- }
- else {
- x2++;
- }
- }
- if (rY1 <= ry2) {
- Y1++;
- }
- else {
- y2++;
- }
- }
- cout << answ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement