2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Coin

本文介绍了一种计算特定条件下硬币抛掷概率的方法,并通过C++代码实现了该算法。针对一枚硬币正面朝上概率为p/q的情况,计算抛掷k次中偶数次正面朝上的概率X/Y,最终求解特定形式的概率值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:

抛掷一枚硬币,正面朝上的概率是p/q (p/q <=0.5),抛掷k次,偶数次朝上的概率是X/Y,求\frac{q}{p}(\frac{q}{p} \le \frac{1}{2})X/Ymod(1e9+7)








思路:

这是一个二项分布,高中数学题



#include<bits/stdc++.h>
#define ll long long
#define N 1000000007
using namespace std;
const long long C=500000004;
ll pp(ll a,ll b)
{
	ll ans=1;
	while(b)
	{
		if(b&1) ans=(ans*a)%N;
	    a=(a*a)%N;
	    b>>=1;
	}
	return ans;
}
int main()
{
	ll p,q,k;
	ll ans=0;
	ll t;
	ll A;
	cin>>t;
	while(t--)
	{scanf("%lld%lld%lld",&p,&q,&k);
	
		q=p-2*q;
		A=__gcd(q,p);
		q/=A;
		p/=A;
		q=(pp(q,k)*C)%N;
		p=pp(p,k*(N-2));
		ans=((q*p)%N+C%N) %N;
		printf("%lld\n",(ans%N+N)%N);	
	}
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值