D距离
问题描述
定义两个长度为l的字符串s=s1s2...sl和t=t1t2...tl之间的距离为所有满足si!=ti的位置i的个数。
例如字符串"abac"和"cbcc"的距离为2,因为第一位和第三位上对应的字符不同。
现在请你求出两个字符串a和b的距离。字符串a是将字符串x复制n份后接在一起的,相应地,字符串b是将字符串y复制m份后接在一起的。
输入格式
第一行两个正整数n和m。
第二行是一个非空字符串x。
第三行是一个非空字符串y。
对于%20的数据,a和b的长度均小于等于100000。
对于%100的数据,保证a和b的长度相同, 1<=n,m<=10e12
x和y全部由小写字母组成,且长度均小于等于100000
输出格式
输出一行一个整数,表示a和b的距离。
样例输入
2 3
rzr
az
样例输出
5
MY CODE:
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
long long ans;
long long gcd(long long x,long long y)
{
if(y==0) return x;
return gcd(y,x%y);
}
int main()
{
long long n,m;
scanf("%lld %lld",&n,&m);
char x[1000001],y[1000001];
scanf("%s\n%s",x,y);
long long a=strlen(x);
long long b=strlen(y);
long long h=gcd(a,b);
long long hh=h*a/h*b/h;
for(long long i=0;i<hh;i++)
{
if(x[i%a]!=y[i%b]) ans++;
}
printf("%lld",1ll*ans*n*a/hh);
return 0;
}