P8305 [CoE R4 E] 伪随机
题目描述
很久很久以前,小明生成了一些数据。
他的数据生成器使用了以下两个函数生成随机数:
```plain
定义函数 srand(32 位无符号整数 seed)
将 x 赋值为 seed
定义函数 rand()
将 x 赋值为 x 异或 (x 左移 13 位)
将 x 赋值为 x 异或 (x 右移 17 位)
将 x 赋值为 x 异或 (x 左移 5 位)
返回 x
```
小明在调用 $\text{srand(seed)}$ 后,连续调用了 $n$ 次 $\text{rand()}$,并且记录下了每次 $\text{rand()}$ 的返回值对 $p$ 取模时得到的余数 $a_i$。
很久很久以后,只有数据生成器依然残存(实现见下发文件的 `generator.cpp`),但生成器的参数 $\text{seed}$ 和 $p$ 已经消失。
小明想要从数据中恢复这两个参数。即给定序列 $a_i$,需要找到任意一组 $\text{seed}$ 和 $p$ 的可能的值。你能帮帮他吗?
---
**简要描述**
小明的数据生成器是下发文件的 `generator.cpp`。你需要根据生成器的输出,反推出生成器的输入。
输入格式
无
输出格式
无
说明/提示
### 数据规模
本题共有 $50$ 个测试点,每个测试点 $2$ 分。
对于所有数据,保证 $n = 10^5$,$\text{seed}$ 是随机选取的,且至少存在一组解。