红包发红包题解

题目背景

红包(redbag)发明了一个抢红包的系统。

题目描述

这个抢红包系统是这样的:假如现在有 w 元,那么你抢红包能抢到的钱就是 [0,w] 等概率均匀随机出的一个实数 x。

现在红包发了一个 w 元的红包,有 n 个人来抢。那么请问第 k 个人期望抢到多少钱?

输出答案对 109+7 取模后的结果。

输入格式

一行三个整数,w,n,k。

输出格式

第 k 个人期望抢到的钱数对 109+7 取模后的结果。

补充:期望可能是分数,关于分数取模,可以问度娘。

输入输出样例

输入 #1复制

2 1 1

输出 #1复制

1

说明/提示

注意红包发明的抢红包系统和微信的抢红包系统不一样,红包发明的抢红包系统中的钱不一定是整数分。

  • 对于 30% 的数据,k=1
  • 另有 30% 的数据,期望值取模前为整数,k≤10。

对于全部数据,0<w<(109+7),n≤1018,k≤n。

思路

暴力。

代码见下

#include<bits/stdc++.h>
using namespace std;
long long w,n,k,mod=1e9+7;
long long pow2(long long a1,long long b1,long long m1){
    long long kk1=1;
    while(b1>=1){
        if(b1%2==1){
            kk1*=a1;
        }
        b1/=2;
        a1*=a1;
        kk1%=m1;
        a1%=m1;
    }
    return kk1;
}
int main(){
	cin>>w>>n>>k;
    cout<<(w*pow2(pow2(2,mod-2,mod),k,mod))%mod<<endl;
    return 0;
}

posted @ 2025-10-15 21:59  bz02_2023f2  阅读(12)  评论(0)    收藏  举报  来源