B站各唱各的<每日一题分享>

题目:


 

思路:

唱失败的可能性为全唱一首歌(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:该题主要考察快速幂和逆元 ,另外新年快乐。祝你新的一年事事顺利!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CTGU-Yoghurt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值