E. Check Transcription(扩展欧几里得加双哈希)

该博客讲述了在遇到哈希冲突导致的算法问题时,如何通过调整哈希模数解决问题。作者分享了一道题目,要求计算01字符串转换成特定字母字符串的方案数。通过预处理字符串哈希值,并利用扩展欧几里得算法找到通解,再枚举解来检查字符串匹配的可能性。题目规模较大,01串长度10^5,字母串长度10^6。
摘要由CSDN通过智能技术生成

我一度怀疑是自己的算法的问题,后来发现是哈希的模数没取好,我取了13332就过了,尼玛简直有病病,以后哈希过不掉的题多来几次哈希。

题目链接:E. Check Transcription

题意:给定一个01字符串,以及一个字母字符串。0代表一种字符串,1代表一种字符串,问你01串构成字母字符串有多少种方案。题目保证0至少有一个,1至少有一个。而且0,1表示的串不能相同,且不能为空串。

01串长度为1e5,字母字符串长度为1e6。

思路:设01串的长度为n,字母字符串的长度为m,1的个数为a,0的个数为b。预处理字符串哈希值。

我们实际上是在满足a*x+b*y=m,这个基础上判断x和y是否是正确答案。

于是我们可以用扩展欧几里得求出一组通解,然后就可以枚举出所有的x与y的解,然后用O(n)的时间去检查字符串哈希值即可。

x_{0}y_{0}为一组通解,d为gcd(a,b)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值