P5104 紅包發紅包
阿新 • • 發佈:2018-12-22
題目看錯見祖宗系列
題目的意思是給你一個\(w\)元的紅包,第\(i\)個搶的人的錢數是從0到剩下的錢中隨機的一個數。然後叫你求第\(k\)個人搶到錢的期望。
顯然答案就是\(\frac{w}{2^k}\)。套上有理數取膜的模板即可求到答案了。
注意:這裡的\(2^k\)不能用1左移,畢竟\(k\)辣麼大。\(k\)不是小於10啊!看清題目!
程式碼:
#include<iostream> using std::cin; using std::cout; using std::endl; #define ll long long const ll MOD = 1e9 + 7; ll w, n, k; ll pow_mod(ll x, ll y, ll z) { ll ans = 1; x %= z; while(y) { if(y & 1) ans = ans * x % z; x = x * x % z; y >>= 1; } return ans % z; } ll inv(ll a, ll p) { return pow_mod(a, p - 2, p); } int main() { cin >> w >> n >> k; cout << w * inv(pow_mod(2, k, MOD), MOD) % MOD << endl; return 0; }