您的位置:首页 > 理论基础 > 计算机网络

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Coin (概率公式+快速幂)

2017-09-16 15:57 369 查看


题意:一枚不均匀的硬币,正面向上的概率是q/p,问抛k次之后向上的次数为偶数的概率是多少。

输出的概率是整数,是把概率变成分数取模(逆元)得到的。

思路:

度娘神了,下面的例子正好可以用于本题,把最后的结果化成一个分数的形式就可以快速幂了。

点击打开链接



#include <bits/stdc++.h>
int MOD=1e9+7;
using namespace std;
typedef long long LL;
LL quickpow(LL m,LL n)
{
LL b=1;
m%=MOD;
while(n>0)
{
if(n&1)b=(b*m)%MOD;
n=n>>1;
m=(m*m)%MOD;
}return b;
}
int main()
{
LL  p,q,k;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld%lld",&p,&q,&k);
LL ans=(quickpow(p,k)+quickpow(p-2*q,k))%MOD;
LL temp=quickpow(p,k);
ans=(ans*quickpow(2,MOD-2))%MOD;
ans=(ans*quickpow(temp,MOD-2))%MOD;
printf("%lld\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: