题目:
思路:
唱失败的可能性为全唱一首歌(1/2^n)与都不唱一首歌(1/2^n)的和
那么唱成功的概率为(1-1/2^n-1)
故唱成功的期望为 m*(1-1/2^n-1)
解释图:
鼠标写的可能有点不整洁,大家见谅哈?
?
代码详解 (用到了快速幂和逆元):
快速幂还不怎么清楚的同学可以看一下我的这篇博客:
https://blog.csdn.net/weixin_60536621/article/details/121193239?spm=1001.2014.3001.5502https://blog.csdn.net/weixin_60536621/article/details/121193239?spm=1001.2014.3001.5502
#include<iostream>
using namespace std;
#include<stdio.h>
typedef long long ll;
const int mod = 1e9 + 7;
int qmi(ll a, ll k, ll p)//快速幂
{
ll ans = 1;
while (k)
{
if (k & 1) ans = ans * a % p;
k >>= 1;
a = (a * a) % p;
}
return ans;
}
int main()
{
ll t, n, m;
scanf("%lld", &t);
while (t--)
{
scanf("%lld%lld", &n, &m);
ll t = qmi(2, n, mod);//2的n次方
printf("%lld\n", (ll)m * (t - 2) % mod * qmi(t, mod - 2, mod) % mod);//m乘以2的n次方-2乘以2n分之一的逆元
}
return 0;
}
PS:该题主要考察快速幂和逆元 ,另外新年快乐。祝你新的一年事事顺利!
|