红包发红包题解
题目背景
红包(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;
}

浙公网安备 33010602011771号