求调
  • 板块题目总版
  • 楼主封禁用户
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/13 13:07
  • 上次更新2023/11/2 14:10:04
查看原帖
求调
982155
封禁用户楼主2023/10/13 13:07
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;
}
2023/10/13 13:07
加载中...