【CQMTC2015#5】机器人 题解(博弈论)

         【题目描述】已知玩家 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的情况,则每一方的期望值均为,\dfrac{1}{2}*1+\dfrac{1}{2}*(-1)=0

        假设一方增加,则为1多对,1的一方期望值为,\dfrac{n}{n+1}-\dfrac{n}{n+1}=0.

        另一方期望值为,\dfrac{n}{n+1}-\dfrac{n}{n+1}=0

        可得增加数量,不会增加期望值,最佳策略不存在.

        则最终胜率为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);
}

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页