來源: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