链接:https://ac.nowcoder.com/acm/contest/894/C
来源:牛客网

题目描述

有一个箱子,开始时有n个黑球,m个蓝球。每一轮游戏规则如下:
第一步:奕奕有p的概率往箱子里添加一个黑球,有(1-p)的概率往箱子里添加一个蓝球。
第二步:华华随机从箱子里取出一个球。
华华喜欢黑球,他想知道k轮游戏之后箱子里黑球个数的期望。

输入描述:

输入五个整数n,m,k,a,b。
1<=n,m<=1e6,1<=k<=1e9
其中p=abab,且a<=b,0<=a<1e9+7,0<b<1e9+7

输出描述:

输出一个数表示k轮游戏后箱子里黑球个数的期望。
输出一个整数,为答案对1e9+7取模的结果。即设答案化为最简分式后的形式为abab,其中a和b互质。输出整数 x 使得bx≡a(mod 1e9+7)且0≤x<1e9+7。可以证明这样的整数x是唯一的。

示例1

输入

2 2 1 1 2

输出

2

示例2

输入

2 2 2 3 10

输出

184000003

题意:如上

思路:求期望题目,一遍是逆推,但是这个好像推不出?看了题解后,我推出来的式子和题解一样,但是过程貌似有点出入,后面再研究研究了。我的思路是,对于第i天的黑球期望 dp[i] = dp[i-1] + p*1 - (dp[i-1] + p*1)(m+n+1),直观上理解,第i天黑球期望等于前一天的期望数加上第一步取得黑球的期望 p*1 ,再减去第二步取出黑球的期望,注意到无论哪一轮,第二步的时候总球数一定是n+m+1,则随机取到黑球期望为 (dp[i-1] + p*1)/(n+m+1)*1。就可以推到dp[i]了。化简后可以用矩阵快速幂算,进一步化简后只需算一个等比数列,用快速幂推就可以了。

题解思路:

注意:本题学的东西还是挺多的,主要是逆元和模方面的细节,以前虽然知道但是没有做过,感觉还是不一样。含模运算过程如果有减法一定要(a-b)%mod = ((a%mod-b%mod)+mod)%mod,不然会出错。

#include<bits/stdc++.h>
#include<iostream>
#include<queue>
#include<cstring>
#include<math.h>
#include<algorithm>
#include<cstdio>
#include<map>
#include<stack>
#include<vector>
#define rep(i,e) for(int i=0;i<(e);++i)
#define rep1(i,e) for(int i=1;i<=(e);++i)
#define repx(i,x,e) for(int i=(x);i<=(e);++i)
#define pii pair<int,int>
#define X first
#define Y second
#define PB push_back
#define MP make_pair
#define mset(var,val) memset(var,val,sizeof(var))
#define scd(a) scanf("%d",&a)
#define scdd(a,b) scanf("%d%d",&a,&b)
#define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define IOS ios::sync_with_stdio(false);cin.tie(0)
typedef long long ll;
using namespace std;#ifdef LOCAL
template<typename T>
void dbg(T t){cout<<t<<" "<<endl;
}
template<typename T, typename... Args>
void dbg(T t, Args... args){cout<<t<<" ";dbg(args...);
}#else
#define dbg(...)
#endif // local
typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3fll;
const int mod = 1e9+7;
const int N = 1e4+10;
typedef long long ll;
#define K 137
const int maxn = 1e3+10;
const int maxm =4e5+10;ll qpow(ll x,ll n){ll res = 1;while(n){if(n % 2 == 1)res = res*x%mod;x  = x*x%mod;n /= 2;}return res;
}void work(){ll n,m,k,a,b;cin>>n>>m>>k>>a>>b;ll p = a*qpow(b,mod-2)%mod;ll s = (n+m)%mod*qpow(n+m+1,mod-2)%mod;ll cc = n*qpow(s,k)%mod;ll aa = p*(((s-qpow(s,k+1)%mod)+mod)%mod)%mod*qpow(((1-s)+mod)%mod,mod-2)%mod;//**注意cout<<(cc+aa)%mod<<endl;}int main()
{
#ifdef LOCALfreopen("in.txt","r",stdin);
#endif // LOCALIOS;work();return 0;
}
题解参考代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=1e9+7;
ll pow1(ll a,ll b)
{ll r=1;while(b){if(b&1)r=r*a%mod;a=a*a%mod;b/=2;}return r;
}
int main()
{int n,m,k,a,b;scanf("%d%d%d%d%d",&n,&m,&k,&a,&b);ll p=1LL*a*pow1(b,mod-2)%mod;ll s=1LL*(n+m)*pow1(n+m+1,mod-2)%mod;ll ans=1LL*n*pow1(s,k)%mod+p*(s-pow1(s,k+1))%mod*pow1(1-s,mod-2)%mod;ans=ans%mod+mod;   //********注意printf("%lld\n",ans%mod);return 0;
}

牛客练习赛46-华华跟奕奕玩游戏(期望+逆元)相关推荐

  1. 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)

    链接:https://ac.nowcoder.com/acm/contest/894/C 来源:牛客网 华华跟奕奕玩游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  2. 牛客练习赛46 B 华华送奕奕小礼物 (预处理前缀和,二分)

    链接:https://ac.nowcoder.com/acm/contest/894/B?&headNav=acm 来源:牛客网 华华送奕奕小礼物 时间限制:C/C++ 1秒,其他语言2秒 空 ...

  3. 牛客练习赛46 A 华华教奕奕写几何 (简单数学)

    链接:https://ac.nowcoder.com/acm/contest/894/A 来源:牛客网 华华教奕奕写几何 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  4. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  5. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  6. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  7. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  8. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  9. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

  10. 牛客练习赛73 D 离别(线段树+右端点排序离线查询)

    牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k. 这个可以用队列或者vector来维护. 然后我们对于q个查询, ...

最新文章

  1. hdu-1847-畅桶工程续
  2. 《敏捷迭代开发:管理者指南》—第2章2.9节增量交付
  3. 号称要打败阿尔法狗的DeepZenGo 高调挑战人类
  4. 遍历 HashSet 的方法
  5. Invalidate和postInvalidate
  6. Shiro 登录认证源码详解
  7. luci L大_智慧城市大讲堂 l 大咖说5G智慧大交通
  8. STM32移植freemodbusRTU(hal库)从机
  9. 写一个函数返回参数二进制中1的个数
  10. kafka架构、基本术语、消息存储结构
  11. c++_cin.getline()与getline() _getline(cin,str,20)
  12. 文后参考文献著录规则
  13. Mac大小写切换需长按caps lock键解决办法
  14. linux 中meltdown指令,用代码切身实践体会meltdown漏洞——初学者的体验感受
  15. 阿里专家问答丨人工智能/机器学习技术在电商场景下的应用
  16. 思科2960交换机telnet连接配置
  17. iOS 集成苹果登录及苹果图标的制作要求
  18. 笔记本win10 睡眠时会自动唤醒?修复后唤醒缓慢也解决了
  19. MediaSession和MediaSessionService的交互流程梳理
  20. 忘记历史就意味着背叛

热门文章

  1. Java线程同步-模拟买票
  2. 专访天冕科技许文彬:以超5000万用户为基础,构建完善的隐私计算数据应用生态
  3. 有哪些对树莓派的有趣改造和扩展应用?
  4. HTML设置格式化时间
  5. kubernetes进阶之路(十六)~~~Storage系列之StorageClass
  6. BUUCTF misc 专题(83)从娃娃抓起
  7. python加速度算位移_基于Labview的加速度两次积分求位移
  8. ZUI易入门Android之Git的使用(一)本地仓库
  9. Vue中watch、computed、updated三者的区别以及使用方法
  10. Python之Pandas连接详解