HDU 1846 Brave Game (博弈論)
問題描述
Brave Game
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15478 Accepted Submission(s): 10577
Problem Description
十年前讀大學的時候,中國每年都要從國外引進一些電影大片,其中有一部電影就叫《勇敢者的遊戲》(英文名稱:Zathura),一直到現在,我依然對於電影中的部分電腦特技印象深刻。今天,大家選擇上機考試,就是一種勇敢(brave)的選擇;這個短學期,我們講的是博弈(
Input
輸入資料首先包含一個正整數C(C<=100),表示有C組測試資料。每組測試資料佔一行,包含兩個整數n和m
Output
如果先走的人能贏,請輸出“first”,否則請輸出“second”,每個例項的輸出佔一行。
Sample Input
2
23 2
4 3
Sample Output
first
second
------------------------------------------------------------
思路
博弈論。記F(n)為以n顆石子開局的勝者id (F(n) = 0/1,先手: 0/後手: 1). 簡單推導一下:
後手勝局 |
先手勝局 |
F(0) = 1 |
F(1) = F(2) = … = F(m) = 0 |
F(m+1) = 1 |
F(m+2) = F(m+3) = … = F(2m+1) = 0 |
F(2m+2) = 1 |
F(2m+3) = F(2m+4) = … = F(3m+2) = 0 |
…… |
…… |
由此可見,後手勝局的充要條件是 n % (m+1) = 0
------------------------------------------------------------
程式碼
#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
int main()
{
int t, n, m;
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &m);
printf(n % (m + 1) == 0 ? "second\n" : "first\n");
}
return 0;
}