当前位置: 代码迷 >> 综合 >> 1066 Bash游戏 【博弈】
  详细解决方案

1066 Bash游戏 【博弈】

热度:91   发布时间:2023-12-29 17:33:30.0

题目链接:51nod-1066

## **题目描述**: 有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。 例如N = 3,K = 2。无论A如何拿,B都可以拿到最后1颗石子。

思路

神奇的博弈论,Bash游戏的板子题。石子总数对(最大可取数+1)取模,若最后的结果为0,则后手必胜,否则先手必胜(两面都聪明,取最优策略)

关于博弈论的学习Blog:
1.博弈论及算法实现
2.SG函数和SG定理【详解】

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;elsecout<<"A"<<endl;}return 0;
}
  相关解决方案