【题目描述】已知玩家 A 有 m 个机器人, 玩家 B 有 n 个机器人,他们每回合要选出若干个机器人进行对决。设某一回合 A 派出 t 个机器人, B 派出 s 个机器人,那么 A 获胜的概率是t/(t+s),B 获胜的概率是s/(t+s)。获胜的一方将缴获败方派出的机器人。现在假设 A 和 B 都采用最优策略,求玩家 A 最终获胜的概率u/v。
【输入格式】一行,两个正整数 m, n
【输出格式】一行, 两个互素的正整数 u, v
【样例输入】 2 2
【样例输出】 1 2
【提示】 对于 30%的数据1<=m,n<=20。 对于 100%的数据1<=m,n<=10^9。
博弈论问题,作者蒟蒻不会严谨证明,就只能说说自己的理解了.
首先假设为1对1的情况,则每一方的期望值均为,
假设一方增加,则为1多对,1的一方期望值为,.
另一方期望值为,
可得增加数量,不会增加期望值,最佳策略不存在.
则最终胜率为m,与m+n的化简结果,求最大公约数化简即可.
代码如下
#include<iomanip>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
int m,n;
int gcd(int x,int y)
{
if(y==0) return x;
else return gcd(y,x%y);
}
int main()
{
scanf("%d%d",&m,&n);
int x=gcd(m,m+n);
printf("%d %d",m/x,(m+n)/x);
}