这几天考试连着好几次被卡hash卡到死。
我谔谔,为什么连hash都要卡。
码力弱鸡什么时候才能站起来。
只需要任意两种字符,比如噫呜呜噫 $ 1551 $ 。
用类似倍增的方法构造如下的串:
$ S_{1} : 1 $
$ S_{2} : 15 $
$ S_{3} : 1551 $
$ S_{4} : 15515115 $
也就是将串逐位取反之后接在原串后面,复制大约13次左右,插进随便一个串里就能卡死自然溢出hash。
不妨将上面的复制方法设 $ S_{i+1} = S_{i}+S‘{i} $ 。
则有 $ hash( S _ { i } ) - hash( S‘ _ { i } ) = ( hash( S _ { i - 1 } ) - hash( S‘ _ { i - 1 } ) ) * ( k ^ { 2 ^ { i - 1 } } - 1 ) $ 。
后面那部分是被 $ 2^i $ 整除的。
总之不要再写自然溢出了。。。真的有人愿意卡。。。
原文:https://www.cnblogs.com/rikurika/p/13308140.html