Nkoj5759:距离

文章讲述了如何计算将字符串x复制n次得到的a与y复制m次得到的b之间的距离,方法是找到两者长度的最小公倍数和最大公约数,然后在该范围内比较对应位置的字符差异。核心代码展示了利用__gcd和__int128进行计算的过程。
摘要由CSDN通过智能技术生成

题目描述:

定义两个长度为L的字符串 s = s 1 s 2 . . . . . s L s=s_1s_2.....s_L s=s1s2.....sL t = t 1 t 2 . . . . . t L t=t_1t_2.....t_L t=t1t2.....tL之间的距离为所有满足 s i ≠ t i s_i\ne t_i si=ti的位置i的个数。例如字符串"abac""cbcc"的距离为2,因为第一位和第三位上对应的字符不同。

现在请你求出两个字符串ab的距离。字符串a是将字符串x复制n份后接在一起的,相应地,字符串b是将字符串y复制m份后接在一起的。例如,若 字符串x"aba"n3 ,那么字符串a"abaabaaba"

数据范围:

1 ≤ n , m ≤ 1 0 12 1\le n,m\le 10^{12} 1n,m1012
x , y 均由小写字母组成,且 ∣ x ∣ , ∣ y ∣ ≤ 1 0 6 x,y均由小写字母组成,且\lvert x\rvert,\lvert y\rvert\le 10^6 xy均由小写字母组成,且x,y106
其中 ∣ x ∣ 表示字符串 x 的长度 其中\lvert x\rvert表示字符串x的长度 其中x表示字符串x的长度

样例输入:

2 3
rzr
az

样例输出:

5

思路:

我们可以找一下规律,会发现:

找最小公倍数长度内,两个字符串之间位置对最大公约数取余数相同的字符,是对应的
对应位置的字符不同距离就+1

但要注意:这个题要爆longlong

核心代码:

__int128 gc=__gcd(x.size(),y.size()),lc=x.size()*y.size()/gc;
for(ll i=0;i<x.size();i++)vis[{x[i],i%gc}]++;
for(ll i=0;i<y.size();i++)ans+=x.size()/gc-vis[{y[i],i%gc}];
write(ans*n*(__int128)x.size()/lc);

THE END

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值