#P7121. Ame 和 Gura 的奇妙探险

    ID: 6021 远端评测题 1000ms 128MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>数论数学Special JudgeO2优化扩展欧几里德扩欧2020

Ame 和 Gura 的奇妙探险

题目背景

鉴于洛谷的 SPJ 编译可能依赖于用户选择的编译器版本,且 SPJ 使用了 C++11,请 C++ 选手使用 C++11 或以上进行提交。

Lewdson Watson Amelia 和 Gawr Gura 在玩 Mivicraft。

Gura 想将地狱里的交通升级为冰船隧道,但在此之前她先得有一把精准采集的镐子。尝试了一遍又一遍,但终究未能成功的她只好可怜兮兮地找到 Ame。Ame 立刻说道:“So easy! I'll get it in my first try.”

(第一次之后)“Well let's try it again!”

(第二次之后)“Hmmm maybe something's getting wrong today?”

(第三次之后)“I'll give you a ground pound you silly enchanting table!”

(第四次之后)“.. Damn.”

于是 Ame 决定借助一些 技 巧 来拿到精准采集的镐子。她通过查询资料得知 Mivicraft 产生随机数使用了梅森旋转算法(Mersenne Twister,MT19937)。Mivicraft 会通过一个 MT19937 引擎产生一系列的随机数来生成世界的区块。

题目描述

Ame 知道,只要她能够找到初始化 MT19937 引擎时使用的种子,她就能够推断出自己如何才能获得一把精准采集的镐子。于是她游历世界,并通过聪明的侦探头脑算出了这个 MT19937 引擎 刚被初始化后 生成的 NN 个随机数(注:这里的 NN 是 MT19937 引擎中的一个参数)。现在她把这 NN 个随机数给了你,希望你能够推断出初始化 MT19937 引擎时使用的种子(0种子<2320\le\text{种子}<2^{32})。值得注意的是,Mivicraft 使用的并非标准的 MT19937 引擎,其中的一些参数与论文相比有所改变,Ame 把它们附加到了输入中。请你帮帮 Ame 吧!

好心的 Mivik 为你准备了一份简单易懂的 MT19937 实现,请在附件中查看。

输入格式

第一行 10 个非负整数,分别对应 MT19937 中的 10 个参数:NNMMAAUUSSBBTTCCLLFF

接下来 NN 行,每行一个非负整数,依次表示 MT19937 引擎刚被初始化后生成的 NN 个随机数。

输出格式

一行一个非负整数,代表 MT19937 引擎初始化时使用的种子。数据保证有解,如果有多个解,你只需要输出任意一个即可。

见 sample/1.in
见 sample/1.out
见 sample/2.in
见 sample/2.out

提示

样例解释 #1

十个参数全部使用标准的 MT19937 参数,种子为 233333。也就是说,你可以通过下面的程序产生同样的随机数序列:

#include <iostream>
#include <random>

std::mt19937 engine(233333);
int main() {
	for (int i = 0; i < 624; ++i)
		std::cout << engine() << std::endl;
	return 0;
}

测试点约束

本题采用捆绑测试。

对于全部数据,有 10M<N2×10510\le M<N\le 2\times 10^50A,B,C<2320\le A,B,C<2^{32}1U,S,T,L311\le U,S,T,L\le 311F<2321\le F<2^{32},保证 FF 是奇数。

每个子任务的具体限制见下表:

子任务编号 分值 特殊限制
1 20 种子小于等于 10001000
2 30 U=S=T=L=16U=S=T=L=16A=B=C=0A=B=C=0
3 50

注:下发文件使用 UTF-8 编码,请使用可识别该编码的编辑器打开。

附件下载备用链接:百度网盘 提取码:jf9e