题意:
给定一个p,q,k,抛一个不公平的硬币正面朝上的概率是q/p,求抛k次硬币正面朝上的频率是偶数的概率。
思路:
完全是高中的知识嘛。。。可是我还是强找规律过不了。
令a=q/p,b=(p-q)/p,可以很容易得到答案可以表示为 C(n, 0)*a^0*b^n+C(n, 2)*a^2*b^(n-2)+...+C(n, n)*a^n*b^0;
令(a+b)^n展开项是a1+a2+a3+...+an,现在我们要求的就是a1+a3+...,这里就用到了只要在高中都会的知识,我们可以求得a1-a2+a3-a4...,然后跟(a+b)^n相加再除以2就是我们要求的,而a1-a2+a3-a4...怎么得到呢,我们展开(-a+b)^n便是。
所以最终答案的式子就是(((p-2*q)/p)^k+1)/2;由于需要%1e9+7,所以再加个费马小定理求逆元即可。
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mod = 1e9+7;
ll qpow(ll bas, int b)
{
ll ans = 1;
while(b)
{
if(b&1) ans = ans*bas%mod;
bas = bas*bas%mod;
b >>= 1;
}
return ans;
}
int t, p, q, k;
int main()
{
for(scanf("%d", &t); t--;)
{
scanf("%d %d %d", &p, &q, &k);
ll ans = (p-2*q)*qpow(p, mod-2)%mod;
ans = qpow(ans, k);
ans = (ans+1)%mod;
ans = ans*qpow(2, mod-2)%mod;
printf("%lld\n", ans);
}
return 0;
}
继续加油~