专栏文章
题解:P12197 Hash Killer I
P12197题解参与者 3已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @min89hd0
- 此快照首次捕获于
- 2025/12/01 22:11 3 个月前
- 此快照最后确认于
- 2025/12/01 22:11 3 个月前
被绿题·注意力高手吓晕。
这个问题是怎么推导出来的?
我先看看要做什么。
原来是出题人下来战书,要我构造两个串,只包含 内的整数,满足对于任意的 ,两个串的 hash 的结果都相等。
hash 计算方式是:一个串 的 hash 值 。相当于把串视为 进制数 的结果。
我直接输出
a aa aaa,hash 值全是 。没想到他预判了我的预判,要求必须串长相等,不讲武德。他还真有勇气!我看了看 hash 的定义,原来是个多项式 。我马上定义一个多项式 ,那 就是 hash 值。
要构造两个串 对于任意 的 hash 都相等,其实就是要构造两个 相等的多项式 和 ,并且每一项系数都是 内的整数。两者相等,也就是两者相减得到的多项式 。 的系数可以取所有 内的整数,把正系数和负系数分别分给 就行了。
所以任务是,构造一个整系数多项式 ,在整数点取值永远是 的倍数,且系数在范围 。
我一看,马上构造出了 ,因为 总有一个是偶数,它 次方肯定是 的倍数了。但是这个系数太大了。 这一项是不影响系数范围的,需要想办法让 取奇数时的偶数项系数变小。
那我只要一直让次数增大不重复,系数不就变小了:
这样系数是小了,但是序列长度有点太大了。
不过这是等比求和,多乘个 可以简化,得到:
次数 ,一共有 个偶数项。
就还可以这样挤一挤:
仍然只有 的系数,不过一共有 个偶数项。取 即可 。
这样构造出了满足条件的 。取 中系数为 的项分别作为两个串的
b 字符位置,其余均填 a,即可构造出串。串长是 。这个序列即为其它题解中提到的 Thue Morse 序列。
你学会了吗?
练习1. 上面我们只用了
ab 两个字符,或者说限制了 的系数绝对值 。如果用满 a-z,你能不能构造出更短的串?练习2. 如果不是对 而是对 或者 取模怎么构造呢?
bonus. 这个问题我们认为
ab 分别对应 。如果 ab 分别对应 两个更大的数,甚至是两个未知的正整数,还能构造吗?相关推荐
评论
共 2 条评论,欢迎与作者交流。
正在加载评论...