BZOJ5292 & 洛谷4457 & LOJ2513:[BJOI2018]治疗之雨——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5292
https://www.luogu.org/problemnew/show/P4457
你现在有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]治疗之雨——题解的更多相关文章
- 【BZOJ5292】[BJOI2018]治疗之雨(高斯消元)
[BZOJ5292][BJOI2018]治疗之雨(高斯消元) 题面 BZOJ 洛谷 题解 设\(f[i]\)表示剩余\(i\)点生命时的期望死亡的次数. 考虑打\(k\)次下来脸上被打了\(i\)下的 ...
- 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)
洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...
- 洛谷P1854 花店橱窗布置 分析+题解代码
洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...
- HAOI2006 (洛谷P2341)受欢迎的牛 题解
HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- 洛谷P4457/loj#2513 [BJOI2018]治疗之雨(高斯消元+概率期望)
题面 传送门(loj) 传送门(洛谷) 题解 模拟赛的时候只想出了高斯消元然后死活不知道怎么继续--结果正解居然就是高斯消元卡常? 首先有个比较难受的地方是它一个回合可能不止扣一滴血--我们得算出\( ...
- [BZOJ5292] [BJOI2018]治疗之雨
题目链接 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=5292 洛谷:https://www.luogu.org/problemnew/show ...
- 洛谷 P1146 【硬币翻转】题解
很久很久之前做过的一道题 翻n-1枚硬币,就是有一枚不翻,也可以理解为翻一枚 直接上程序,看程序说话 #include<iostream> using namespace std; ; b ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
随机推荐
- cocos2dx - ActionManager内存泄露
ActionManager memory leak cocos2d-x3.7 都3.7了还有这样的bug,真是好难过,不过还是好开源的,谁都可以贡献一下 问题描述: 当创建一个node,并让它run一 ...
- 「日常训练」Two Substrings(Codeforces Round 306 Div.2 A)
题意与分析 一道非常坑的水题.分析醒了补. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back ...
- Qt-QML-自定义个自己的文本Text
好久都没有正经的更新自己的文章了,这段时间也辞职了,听了小爱的,准备买个碗,自己当老板,下面请欣赏效果图 这个界面布局就是自己是在想不到啥了,按照常规汽车导航的布局布局了一下,主要看内容哈,看看这个文 ...
- Windows运行机理——主程序—WinMain
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 在windows 操作系统下,用C 或者C++来编写MS-DOS 应用 ...
- django 连接mysql报错
原因: 问题1. 即从mysql5.7版本之后,默认采用了caching_sha2_password验证方式. 问题2. 然后在执行 python manage.py makemigrations依 ...
- Matlab结构体定义
定义一个Matlab结构体的代码,以飞行器为例: classdef flightpro properties pos = [ ]; RGB = [ ]; rate; type; end end
- 从hive导入到oracle(Hcatalog)
1.使用catalog的情况下: sqoop export --table tableName2 \ #oracle表 --connect jdbc:oracle:thin:@127.0.0.1:15 ...
- windows远程连接失败问题排查思路
一般情况下,对WIN7的远程连接只需要5步即可完成远程连接的设置: 1).用户是否设置了密码 2).计算机属性-允许远程登录 3).设置计算机永不睡眠 4).关闭防火墙或者设置入站规则 5).排查Re ...
- 衡量经济活动的价值:国内生产总值(GDP, Gross Domestic Product)
定义 GDP是在给定的时期内,经济生产的所有最终产品和服务的市场价值. 由于每一件产品或者服务的交易都会涉及到一个买者和一个卖着,买者支出的每一元钱必然成为卖者收入的每一元钱,因此,GDP既可以看成是 ...
- A+B 输入输出练习I
while True: try: s=raw_input() a,b=s.split(' ') a,b=int(a),int(b) print a+b except EOFError: break A ...