我一度怀疑是自己的算法的问题,后来发现是哈希的模数没取好,我取了13332就过了,尼玛简直有病病,以后哈希过不掉的题多来几次哈希。
题意:给定一个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)的时间去检查字符串哈希值即可。
为一组通解,d为gcd(a,b)。