1. 程式人生 > >1066 Bash遊戲 【博弈】

1066 Bash遊戲 【博弈】

## **題目描述**: 有一堆石子共有N個。A B兩個人輪流拿,A先拿。每次最少拿1顆,最多拿K顆,拿到最後1顆石子的人獲勝。假設A B都非常聰明,拿石子的過程中不會出現失誤。給出N和K,問最後誰能贏得比賽。 例如N = 3,K = 2。無論A如何拿,B都可以拿到最後1顆石子。

思路

神奇的博弈論,Bash遊戲的板子題。石子總數對(最大可取數+1)取模,若最後的結果為0,則後手必勝,否則先手必勝(兩面都聰明,取最優策略)

AC程式碼

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		int n, k;
		cin >> n >> k;
		if(n%(k+1) == 0)
		cout<<"B"<<endl;
		else
		cout<<"A"<<endl;
	}
	return 0;
}