列表

详情


NC26256. 石头剪刀布

描述

小阳和小石玩石头剪刀布的游戏,他们在地上画了 n 个长度为 1 的格子。
小阳一开始在 1 号格子,如果小阳赢了,那么他就能往前走 1 格(若在 n 号格子,则不往前走)。如果输了,就倒退 1 格(若在 1 号格子,则不往后走),平局原地不动。
小阳已经知道了他石头剪刀布赢的概率是 ,平的概率是 ,显然输的概率是
求小阳走到 n 号格子期望进行多少局石头剪刀布。
答案对 取模。

输入描述

第一行输入三个正整数 n,a,b,表示格子个数,小阳石头剪刀布赢的概率和平的概率。(概率已对  取模)

输出描述

共一行,输出答案。

示例1

输入:

50 200000002 400000003

输出:

630223353

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 400K, 提交时间: 2020-02-26 18:21:33

#include<bits/stdc++.h>
using namespace std;

long long n,a,b,mod=1e9+7;
long long fastpow(long long a,long long b)
{
	long long s=1;
	for(;b;b>>=1,a=a*a%mod)if(b&1)s=s*a%mod;
	return s;
}
int main()
{
	long long i,j,t,ans;
	scanf("%lld%lld%lld",&n,&a,&b);
	ans=j=t=fastpow(a,mod-2);
	for(i=2;i<n;i++)
	{
		j=(1+(1-a-b+2*mod)%mod*j%mod)*t%mod;
		ans=(ans+j)%mod;
	}
	printf("%lld\n",ans);
	return 0;
}

上一题