1. 程式人生 > 實用技巧 >hdu 2188 巴什博弈

hdu 2188 巴什博弈

Problem Description 對於四川同胞遭受的災難,全國人民紛紛伸出援助之手,幾乎每個省市都派出了大量的救援人員,這其中包括搶險救災的武警部隊,治療和防疫的醫護人員,以及進行心理疏導的心理學專家。根據要求,我校也有一個奔赴災區救災的名額,由於廣大師生報名踴躍,學校不得不進行選拔來決定最後的人選。經過多輪的考核,形勢逐漸明朗,最後的名額將在“林隊”和“徐隊”之間產生。但是很巧合,2個人的簡歷幾乎一模一樣,這讓主持選拔的8600很是為難。無奈,他決定通過捐款來決定兩人誰能入選。
選拔規則如下:
1、最初的捐款箱是空的;
2、兩人輪流捐款,每次捐款額必須為正整數,並且每人每次捐款最多不超過m元(1<=m<=10)。
3、最先使得總捐款額達到或者超過n元(0<n<10000)的一方為勝者,則其可以親赴災區服務。
我們知道,兩人都很想入選志願者名單,並且都是非常聰明的人,假設林隊先捐,請你判斷誰能入選最後的名單? Input 輸入資料首先包含一個正整數C,表示包含C組測試用例,然後是C行資料,每行包含兩個正整數n,m,n和m的含義參見上面提到的規則。 Output 對於每組測試資料,如果林隊能入選,請輸出字串"Grass", 如果徐隊能入選,請輸出字串"Rabbit",每個例項的輸出佔一行。 Sample Input 2 8 10 11 10 Sample Output Grass Rabbit 解析:巴什博弈 噹噹前剩餘n為(m+1)的倍數時則這時取的人必敗,後者只需取(m+1-前者取的數量)。 反之,這時取的人必勝,只需構造出當前剩餘n為(m+1)的倍數這種狀態。
#include <cstdio>
using
namespace std; int n; int main(){ scanf("%d",&n); while(n--){ int a,b; scanf("%d%d",&a,&b); if(a%(b+1)==0)puts("Rabbit"); else puts("Grass"); } return 0; }