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=1505;
const int p=1e9+7;
inline ll read(){ll X=0,w=0;char ch=0;while(!isdigit(ch)){w|=ch=='-';ch=getchar();}while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
ll qpow(ll k,int n){ll res=1;while(n){if(n&1)res=res*k%p;k=k*k%p;n>>=1;}return res;
}
ll n,q,m,k,f[N],a[N][N],x[N];
inline void init(){ll inv1=qpow(m+1,p-2),inv2=qpow(m,p-2);f[0]=qpow(inv1*m%p,k);for(int i=1;i<=min(n,k);i++)f[i]=f[i-1]*inv2%p*qpow(i,p-2)%p*(k-i+1)%p;for(int i=1;i<n;i++){for(int j=1;j<=i;j++)a[i][j]=(f[i-j]*m%p+f[i+1-j])%p*inv1%p;a[i][i+1]=f[0]*inv1%p;}for(int j=1;j<=n;j++)a[n][j]=f[n-j];for(int i=1;i<=n;i++)a[i][n+1]=p-1;for(int i=1;i<=n;i++)(a[i][i]+=p-1)%=p;
}
ll solve(){if(!k)return -1;if(!m){if(k==1)return -1;int res=0;while(q>0){if(q<n)q++;q-=k;res++;}return res;}init();for(int i=1;i<=n;i++){ll inv=qpow(a[i][i],p-2);a[i][i]=1;(a[i][n+1]*=inv)%=p;if(i!=n)(a[i][i+1]*=inv)%=p;for(int j=i+1;j<=n;j++){ll tmp=a[j][i];a[j][i]=0;(a[j][i+1]+=p-tmp*a[i][i+1]%p)%=p;(a[j][n+1]+=p-tmp*a[i][n+1]%p)%=p;}}x[n]=a[n][n+1];for(int i=n;i>q;i--)x[i-1]=(a[i-1][n+1]-a[i-1][i]*x[i]%p+p)%p;memset(f,0,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 0;
}

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

+本文作者:luyouqi233。               +

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

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

转载于:https://www.cnblogs.com/luyouqi233/p/9116458.html

BZOJ5292 洛谷4457 LOJ2513:[BJOI2018]治疗之雨——题解相关推荐

  1. 洛谷P5520 [yLOI2019] 青原樱 题解

    洛谷P5520 [yLOI2019] 青原樱 题解 题目链接:P5520 [yLOI2019] 青原樱 题意: n n n 个空放 m m m 个物品,两两物品不能直接相邻,至少空一格 纯数学题. 看 ...

  2. 洛谷P5633 最小度限制生成树 题解

    洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...

  3. 洛谷P2619 [国家集训队]Tree I 题解

    洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...

  4. 洛谷P1282 多米诺骨牌 题解

    洛谷P1282 多米诺骨牌 题解 题目链接:P1282 多米诺骨牌 题意: 多米诺骨牌由上下 222 个方块组成,每个方块中有 1∼61\sim61∼6 个点.现有排成行的上方块中点数之和记为 S1S ...

  5. 洛谷P4084 [USACO17DEC]Barn Painting G 题解

    洛谷P4084 [USACO17DEC]Barn Painting G 题解 题目链接:P4084 [USACO17DEC]Barn Painting G 题意:题意:给定一颗N个节点组成的树,3种颜 ...

  6. 洛谷P3237 [HNOI2014]米特运输 题解

    洛谷P3237 [HNOI2014]米特运输 题解 题目链接:P3237 [HNOI2014]米特运输 题意: 这题面是真的长啊 qwq 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为 ...

  7. 洛谷P4315 月下“毛景树” 题解

    洛谷P4315 月下"毛景树" 题解 题目链接:P4315 月下"毛景树" 题意:请维护一个数据结构,支持 改第 kkk 条边的边权 结点 uuu 到 vvv ...

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

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

  9. 洛谷P4287 [SHOI2011]双倍回文 题解

    洛谷P4287 [SHOI2011]双倍回文 题解 题目链接:P4287 [SHOI2011]双倍回文 题意: 记字符串 www 的倒置为 wRw^RwR .例如 (abcd)R=dcba(\tt{a ...

最新文章

  1. loadrunner——win7+LR11配置
  2. 《这就是搜索引擎:核心技术详解》---读后感
  3. java 线程状态_JAVA线程漫谈:线程状态与状态转换解析
  4. Maven快速创建SpringMVC web(1)
  5. php 查找无限级,Ztree + PHP 无限级节点 递归查找节点法
  6. 2021计算机职业适应性测试考什么,单招考试面试内容(职业适应性测试)大纲详解(信息技术类)...
  7. ibmt42装Android,IBM T42系统升级初步体会,爽!
  8. php过滤4字节的字符串,过滤utf8 字符中超过三个字节的字符,或者非utf8字符
  9. Cisco路由器DHCP服务器基本配置
  10. 研磨设计模式笔记之简单工厂模式
  11. Git工具的基本使用(一)
  12. android第三方apk找不到/system/lib64/里面的系统库
  13. qimgv(图片视频浏览器)-小工具
  14. 【愚公系列】2022年04月 编码解码-摩尔斯电码和栅栏密码
  15. 一个理财小白如何挑选靠谱的网络理财产品?
  16. 橡胶密封圈的作用和优点
  17. 在有M1芯片的Mac上安装微信、抖音等软件
  18. 金融开发常用术语解释
  19. 计算机网络(期末复习1~3章)
  20. Python selenium操作浏览器全屏截图

热门文章

  1. php字符串反转函数_PHP | 反转给定的字符串而不使用库函数
  2. ThinkPHP5.1中使用Redis来缓存
  3. 15. 三数之和 golang
  4. 377. 组合总和 Ⅳ golang 动态规划
  5. Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式
  6. 组件文件已损坏或android内部模块,android - Android Q更新后,模块化系统组件在托管配置文件中不可用 - 堆栈内存溢出...
  7. 二叉树题目----1 前序中序后序遍历二叉树并返回相应的遍历(不是打印)
  8. 【FPGA VerilogHDL】第一次尝试:LED灯基础实验
  9. Python3正则表达式
  10. 指定结构体元素的位字段