来源:Facebook黑客杯。Facebook黑客杯子Subround 1B - 老虎机黑客
我试过从下面的函数生成一些返回值的列表,但似乎无法找到能够预测未来随机数的原因。我将如何去解决像这样的问题?
老虎机黑客
您最近结识了一个人谁老虎机编写软件。在和他聊了一会儿之后,你会注意到他喜欢展示他对老虎机的工作方式的了解。最终,你会让他详细描述特定品牌机器上使用的算法。该算法如下:
int getRandomNumber() { secret = (secret * 5402147 + 54321) % 10000001; return secret % 1000; }
该函数返回[0,999]中的整数值;每个数字表示在特定机器状态期间出现在车轮上的十个符号之一.secret最初设置为您未知的某个非负值。
通过观察足够长的机器的运行情况,您可以确定机密值,从而预测未来结果。了解未来的结果,您将能够以聪明的方式下注并赢得大量资金。
输入 输入的第一行包含正数T(测试用例的数量)。随后是T测试用例。每个测试用例都包含一个正整数N,即您所做的观察次数。接下来N个令牌是从0到999的整数,用于描述您的观察结果。 输出 对于每个测试用例,输出将由机器显示的下一个10个值,用空格分隔。 如果您观察到的序列不能由朋友向您描述的机器生成,请打印“错误的机器”。 如果您无法唯一确定接下来的10个值,请输入“没有足够的观察值”。
约束 T = 20 1≤N≤100个 令牌在输入是不超过3个字符,并且仅包含数字0-9。
样品输入
5 1 968 3 767 308 284 5 78 880 53 698 235 7 23 786 292 615 259 635 540 9 862 452 303 558 767 105 911 846 462
样本输出
Not enough observations 577 428 402 291 252 544 735 545 771 34 762 18 98 703 456 676 621 291 488 332 38 802 434 531 725 594 86 921 607 35 Wrong machine
所以你不要试图计算最初的秘密。但是你怎么能确定你为第一次观察产生的候选人是否有可能完成?你能否显示[0,10,000,000]中的每个数字都有关于`secret =(secret * 5402147 + 54321)%10000001`的倒数? – 2011-01-27 15:03:26