Brave Game
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11821 Accepted Submission(s): 7962
Problem Description 十年前讀大學的時候,中國每年都要從國外引進一些電影大片,其中有一部電影就叫《勇敢者的遊戲》(英文名稱:Zathura),一直到現在,我依然對於電影中的部分電腦特技印象深刻。
今天,大家選擇上機考試,就是一種勇敢(brave)的選擇;這個短學期,我們講的是博弈(game)專題;所以,大家現在玩的也是“勇敢者的遊戲”,這也是我命名這個題目的原因。
當然,除了“勇敢”,我還希望看到“誠信”,無論考試成績如何,希望看到的都是一個真實的結果,我也相信大家一定能做到的~
各位勇敢者要玩的第一個遊戲是什麼呢。很簡單,它是這樣定義的:
1、 本遊戲是一個二人遊戲;
2、 有一堆石子一共有n個;
3、 兩人輪流進行;
4、 每走一步可以取走1…m個石子;
5、 最先取光石子的一方為勝;
如果遊戲的雙方使用的都是最優策略,請輸出哪個人能贏。
Input 輸入資料首先包含一個正整數C(C<=100),表示有C組測試資料。
每組測試資料佔一行,包含兩個整數n和m(1<=n,m<=1000),n和m的含義見題目描述。
Output 如果先走的人能贏,請輸出“first”,否則請輸出“second”,每個執行個體的輸出佔一行。
Sample Input
2 23 2 4 3
Sample Output
first second
Author lcy
Source ACM Short Term Exam_2007/12/13
Recommend lcy
解題思路:這是一道博弈論的題,主要是考察的巴什博弈,這類問題的主要問題就是如題 做法是考慮n與m+1的關係 要是n%(m+1)==0意味著這個人無論怎麼弄,他的後手都可以取光所有的石子,基於這種思想,兩人的最優策略都是讓對方率先陷入這種必敗的局面,但是先手有先天優勢,所以,只需要判斷在沒有拿石子的情況下,是否是已經必敗的情況,若不是,無論如何後手都不會獲得勝利,若是則無論如何先手都不會獲勝
變形題:取最後一個石子的人失敗 當(n-1)%(m+1)==0後手必敗
#include<iostream> #include<cstdio> #include<stdio.h> #include<cstring> #include<cstdio> #include<climits> #include<cmath> #include<vector> #include <bitset> #include<algorithm> #include <queue> #include<map> #define inf 9999999; using namespace std;int n,m,T;int main(){cin>>T;while(T--){cin>>n>>m;if(n%(m+1)==0){cout<<"second"<<endl;}else{cout<<"first"<<endl;}}}