https://www.lydsy.com/JudgeOnline/problem.php?id=5292

https://www.luogu.org/problemnew/show/P4457

https://loj.ac/problem/2513

你现在有m+1个数:第一个为p,最小值为0,最大值为n;剩下m个都是无穷,没有最小值或最大值。
你可以进行任意多轮操作,每轮操作如下:
在不为最大值的数中等概率随机选择一个(如果没有则不操作),把它加一;
进行k次这个步骤:在不为最小值的数中等概率随机选择一个(如果没有则不操作),把它减一。
现在问期望进行多少轮操作以后第一个数会变为最小值0。

期望dp的一个惯用套路。

设f[i]为正好打中英雄i下的概率,则f[i]=C(k,i)*(1/(m+1))^k*(m/(m+1))^(k-i)

于是不难得到f[i]与f[i-1]之间的关系,则线性推之。

再设a[i][j]为英雄i血经过一轮变j血的概率。

则a[i][j]=(f[i-j]*m+f[i+1-j])/(m+1),但是当i=n时不适用,当i<j时也不适用,二者特判之。

最后令x[i]为英雄到i血的期望。

则有:

x[0]=0;

x[1]=a[1][2]*x[2]+a[1][1]*x[1]+1

x[2]=a[2][3]*x[3]+a[2][2]*x[2]+a[2][1]*x[1]+1

……

x[n]=a[n][n]*x[n]+a[n][n-1]*x[n-1]+……

(注意最后一项有细微差别。)

此时我们可以高斯消元求出答案……?

n=1500仿佛在开玩笑。

那么这样的式子一定有什么特殊的方法可以消元。

我们每次用1式消掉x[1],用2式x[2]……,则复杂度其实只需要O(n^2)(因为1式只有2个数,2式消完后也只有2个数……以此类推)

这样我们每一个式子就是一个二元一次方程,最后一个式子是一个一元一次方程,于是就可以求解了。

(PS:还有其他比如k=0/1,m=0之类的特判不要忘了加。)

#include<cmath>
#include<queue>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=;
const int p=1e9+;
inline ll read(){
ll X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
ll qpow(ll k,int n){
ll res=;
while(n){
if(n&)res=res*k%p;
k=k*k%p;n>>=;
}
return res;
}
ll n,q,m,k,f[N],a[N][N],x[N];
inline void init(){
ll inv1=qpow(m+,p-),inv2=qpow(m,p-);
f[]=qpow(inv1*m%p,k);
for(int i=;i<=min(n,k);i++)
f[i]=f[i-]*inv2%p*qpow(i,p-)%p*(k-i+)%p; for(int i=;i<n;i++){
for(int j=;j<=i;j++)
a[i][j]=(f[i-j]*m%p+f[i+-j])%p*inv1%p;
a[i][i+]=f[]*inv1%p;
}
for(int j=;j<=n;j++)a[n][j]=f[n-j];
for(int i=;i<=n;i++)a[i][n+]=p-;
for(int i=;i<=n;i++)(a[i][i]+=p-)%=p;
}
ll solve(){
if(!k)return -;
if(!m){
if(k==)return -;
int res=;
while(q>){if(q<n)q++;q-=k;res++;}
return res;
}
init();
for(int i=;i<=n;i++){
ll inv=qpow(a[i][i],p-);
a[i][i]=;(a[i][n+]*=inv)%=p;
if(i!=n)(a[i][i+]*=inv)%=p;
for(int j=i+;j<=n;j++){
ll tmp=a[j][i];a[j][i]=;
(a[j][i+]+=p-tmp*a[i][i+]%p)%=p;
(a[j][n+]+=p-tmp*a[i][n+]%p)%=p;
}
}
x[n]=a[n][n+];
for(int i=n;i>q;i--)
x[i-]=(a[i-][n+]-a[i-][i]*x[i]%p+p)%p;
memset(f,,sizeof(f));
return x[q];
}
int main(){
int t=read();
while(t--){
n=read(),q=read(),m=read(),k=read();
printf("%lld\n",solve());
}
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

BZOJ5292 & 洛谷4457 & LOJ2513:[BJOI2018]治疗之雨——题解的更多相关文章

  1. 【BZOJ5292】[BJOI2018]治疗之雨(高斯消元)

    [BZOJ5292][BJOI2018]治疗之雨(高斯消元) 题面 BZOJ 洛谷 题解 设\(f[i]\)表示剩余\(i\)点生命时的期望死亡的次数. 考虑打\(k\)次下来脸上被打了\(i\)下的 ...

  2. 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)

    洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...

  3. 洛谷P1854 花店橱窗布置 分析+题解代码

    洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...

  4. HAOI2006 (洛谷P2341)受欢迎的牛 题解

    HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...

  5. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  6. 洛谷P4457/loj#2513 [BJOI2018]治疗之雨(高斯消元+概率期望)

    题面 传送门(loj) 传送门(洛谷) 题解 模拟赛的时候只想出了高斯消元然后死活不知道怎么继续--结果正解居然就是高斯消元卡常? 首先有个比较难受的地方是它一个回合可能不止扣一滴血--我们得算出\( ...

  7. [BZOJ5292] [BJOI2018]治疗之雨

    题目链接 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=5292 洛谷:https://www.luogu.org/problemnew/show ...

  8. 洛谷 P1146 【硬币翻转】题解

    很久很久之前做过的一道题 翻n-1枚硬币,就是有一枚不翻,也可以理解为翻一枚 直接上程序,看程序说话 #include<iostream> using namespace std; ; b ...

  9. 洛谷P1972 [SDOI2009]HH的项链 题解

    [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...

随机推荐

  1. SpringBoot学习:整合Redis

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 pom.xml添加对redis的依赖: <!-- https://mvnrepos ...

  2. 用ext_skel,实现一个PHP扩展,添加到PHP并调用

    1 创建函数定义文件 #mkdir /home/phpext #vi mydefined.skel string get_text(string str) 2 根据README所提供的信息创建预定义文 ...

  3. TPO-12 C2 A problem of the TA's payroll

    TPO-12 C2 A problem of the TA's payroll payroll n. 工资单:在册职工人数:工资名单: paycheck n. 付薪水的支票,薪水 paperwork ...

  4. python爬虫基础之一(爬淘宝)

    没想到python如此强大, 今天看一会视频学会了一段python爬虫 这就是我今天学到的内容爬去淘宝网关于书包的一些信息,包括价格, #coding=utf-8 import requests#导入 ...

  5. HDU - 6409:没有兄弟的舞会(数学+思维)

    链接:HDU - 6409:没有兄弟的舞会 题意: 题解: 求出最大的 l[i] 的最大值 L 和 r[i] 的最大值 R,那么 h 一定在 [L, R] 中.枚举每一个最大值,那么每一个区间的对于答 ...

  6. (转)Shadow Mapping

    原文:丢失,十分抱歉,这篇是在笔记上发现的.SmaEngine 阴影和级联部分是模仿UE的结构设计   This tutorial will cover how to implement shadow ...

  7. 人艰不拆之破解低版本IE不兼容mediaQuery

    先放个链接 大家预览下 http://scottjehl.github.io/Respond/test/test.html 值得注意的是 将页面源代码下载到本地时,直接用IE打开是没有效果的.需要把静 ...

  8. [模板]非递归线段树(zkw的变异版本)

    类似于zkw,但空间只用两倍,zkw要4倍. 链接 可以下传标记,打熟后很好码. #include <set> #include <cmath> #include <cs ...

  9. 网络安全部门的漏洞扫描让你头痛不已么——PHP环境选它就可以了

    最近网络安全要求是越来越严,原来PHP编写的程序在XAMPP或者其他环境下总会被某款软件扫出漏洞,进而上级部门就停止了我们服务器的外网出口,然而自从发现了一款安全环境神器UPUPW后,这样的问题就再也 ...

  10. java一些面试题

    java虚拟机 什么时候会触发full gc System.gc()方法的调用 老年代空间不足 永生区空间不足(JVM规范中运行时数据区域中的方法区,在HotSpot虚拟机中又被习惯称为永生代或者永生 ...