2022牛客寒假算法基础集训营1,B站与各唱各的(公式推期望,逆元)

传送门
在这里插入图片描述
思路:

首先注意到句子与句子之间没有办法互相影响,因此答案是一句话的期望 q q q乘以 m m m,由于无法交流,每个人在唱每句(第 i i i句)时唯一的策略就是随机以的概率 p i p_{i} pi决定唱或不唱这一句,又由于 n n n个人之间没有区别,所以不同人的概率一定是相等的,因此 p i ≡ p p_{i}\equiv p pip,因此,唱失败的概率是 p n + ( 1 − p ) n p^{n}+\left( 1-p\right) ^{n} pn+(1p)n,求其最小值得 p = 1 2 p=\dfrac{1}{2} p=21

所以最终答案为 m ( 1 − ( 1 2 ) n + ( 1 − 1 2 ) n ) = m 2 n − 2 2 n m\left( 1-\left( \dfrac{1}{2}\right) ^{n}+\left( 1-\dfrac{1}{2}\right) ^{n}\right) =m\dfrac{2^{n}-2}{2^{n}} m(1(21)n+(121)n)=m2n2n2

逆元代码:

const int P = 1e9+7;
int ksm(int x,int k) {
    int ans=1;
    while (k) {
        if (k&1) ans=1ll*ans*x%P;
        x=1ll*x*x%P;
        k>>=1;
    }
    return ans;
}
int inv(int x) {
    return ksm(x,P-2);
}

ac代码:

#include<bits/stdc++.h>
using namespace std;
const int P = 1e9+7;
int ksm(int x,int k) {
    int ans=1;
    while (k) {
        if (k&1) ans=1ll*ans*x%P;
        x=1ll*x*x%P;
        k>>=1;
    }
    return ans;
}
int inv(int x) {
    return ksm(x,P-2);
}
void solve(){
    int n,m;
    scanf("%d%d",&n,&m);
    printf("%lld\n",1ll*(ksm(2,n)-2)*inv(ksm(2,n))%P*m%P);
}
int main(){
    int t;
    scanf("%d",&t);
    while (t--) solve();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值