1 条题解
-
0
自动搬运
来自洛谷,原作者为

yzy1
Меня мое сердце, в тревожную даль зовёт.搬运于
2025-08-24 22:37:51,当前版本为作者最后更新于2022-04-28 09:29:18,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目大意
给出一个 XOR-Shift 生成的长度为 的数列 ,数列元素对 取模。根据数列还原 XOR-Shift 的种子 和 。
算法
显然 大于 中最大值。易得 应在 附近。设 为取模前的 数列。特别地,。考虑如何从 得到 :把 的每个二进制位设为未知数,由 XOR-Shift 的过程列出异或方程组,高斯消元解出。假设 已经固定,则 。又由于取值范围 位无符号整数。故 只有 种取值。由此我们可以得到一个基于随机化的算法:每次从 到 随机一个整数作为 ,然后从所有可能成为 的整数中随机一个作为 ,检查是否合法。若合法则通过高斯消元得到 。
设答案唯一,则每次尝试得到答案的概率约为:
$$\frac{1}{(\frac{3\max\{a\}}{n}+1) \frac{2^{32}}{\max\{a\}}} $$当 较大时,概率约等于 ,该算法表现较好。但 较小时不佳。调整参数后该算法可获得 分。
算法
较小时,可认为 。考虑用类似 P7350 这题的方式来做这道题。计算出 的所有长度为 的子区间的 hash 值存入
unordered_map。每次随机一个 ,生成一个长度为 的序列,查unordered_map判断这个序列是否和 的子区间匹配,若匹配则重复高斯消元直到还原出 ,判断 是否合法。这个做法正确性不太会证,仅感性理解: 较小时,若每次随机的 得到的 hash 存在于
unordered_map,则较大概率这个种子合法。可以简单地认为检查一个种子是否合法是 的。相当于每次检查 个种子中的一个是否在 个种子中,每次成功率约 。
我们可以数据分治,在 时使用做法 ,否则使用做法 。调参后即可 AC。
- 1
信息
- ID
- 7058
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者