杭电多校HDU 6656 Kejin Player(概率DP)题解
题意:
最低等级\(level\ 1\),已知在\(level\ i\)操作一次需花费\(a_i\),有概率\(p_i\)升级到\(level\ i+1\),有\(1 - p_i\)掉级到\(x_i(x_i <= i)\),询问\(q\)次,问你每次从\(l\)升级到\(r\)的花费的期望。
思路:
我们设\(dp[i]\)为从\(1\)升级到\(i\)的期望花费,那么显然有从\(l\)升级到\(r\)的期望花费为\(dp[r] - dp[l]\)。
然后我们可以知道,升级到\(i\)有两种情况:
已经花费了\(dp[i-1]\)必加。从\(i-1\)升级,那么花费\(a_{i-1}\);掉级到\(x_{i-1}\)再升到\(i\),那么花费\(a_{i-1} + dp[i]-dp[x_{i-1}]\),那么可以列出方程:
\]
化简后可得正解。
代码:
#include<map>
#include<set>
#include<queue>
#include<cmath>
#include<stack>
#include<ctime>
#include<vector>
#include<cstdio>
#include<cstring>
#include<string>
#include<sstream>
#include<iostream>
#include<algorithm>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int maxn = 5e5 + 5;
const ll MOD = 1e9+7;
const ull seed = 13131;
const int INF = 998244353;
ll dp[maxn];
ll r[maxn], s[maxn], x[maxn], a[maxn];
ll ppow(ll a, ll b){
ll ret = 1;
while(b){
if(b & 1) ret = ret * a % MOD;
b >>= 1;
a = a * a % MOD;
}
return ret;
}
int main(){
int T;
scanf("%d", &T);
while(T--){
int n, q;
scanf("%d%d", &n, &q);
for(int i = 1; i <= n; i++){
scanf("%lld%lld%lld%lld", &r[i], &s[i], &x[i], &a[i]);
}
dp[1] = 0;
for(int i = 2; i <= n + 1; i++){
ll inv = ppow(r[i - 1], MOD - 2);
ll tmp1 = ((s[i - 1] * inv % MOD) * dp[i - 1] + a[i - 1]) % MOD;
ll tmp2 = ((s[i - 1] - r[i - 1]) * inv % MOD) * dp[x[i - 1]] % MOD;
ll tmp3 = ((s[i - 1] - r[i - 1]) * inv % MOD) * a[i - 1] % MOD;
dp[i] = ((tmp1 - tmp2) % MOD + tmp3) % MOD;
dp[i] = (dp[i] % MOD + MOD) % MOD;
}
// for(int i = 1; i <= n + 1; i++) printf("%lld\n", dp[i]);
while(q--){
int l, r;
scanf("%d%d", &l, &r);
ll ans = dp[r] - dp[l];
ans = (ans % MOD + MOD) % MOD;
printf("%lld\n", ans);
}
}
return 0;
}
杭电多校HDU 6656 Kejin Player(概率DP)题解的更多相关文章
- HDU 6656 Kejin Player (期望DP 逆元)
2019 杭电多校 7 1011 题目链接:HDU 6656 比赛链接:2019 Multi-University Training Contest 7 Problem Description Cub ...
- 2019杭电多校第七场 HDU - 6656 Kejin Player——概率&&期望
题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...
- HDU 6656 Kejin Player
hdu题面 Time limit 5000 ms Memory limit 524288 kB OS Windows 解题思路 因为升级只能一级一级地升,所以所求期望满足了区间加的性质,可以一级一级地 ...
- hdu多校第七场 1011 (hdu6656) Kejin Player 概率dp
题意: 一个游戏,有许多关,到下一关要花费金钱,做出尝试,有概率成功,若成功则到达下一关,若失败则停在此关或退回到前面某关,询问第l关到第r关的期望费用 题解: 显然,第r关到第l关的费用是dp[r] ...
- 杭电多校HDU 6599 I Love Palindrome String (回文树)题解
题意: 定义一个串为\(super\)回文串为: \(\bullet\) 串s为主串str的一个子串,即\(s = str_lstr_{l + 1} \cdots str_r\) \(\bullet\ ...
- 杭电多校HDU 6601 Keen On Everything But Triangle(主席树)题解
题意: 有\(n\)根长度不一的棍子,q次询问,求\([L,R]\)区间的棍子所能组成的周长最长的三角形.棍长\(\in [1, 1e9]\),n\(\in [1, 1e5]\). 思路: 由于不构成 ...
- 杭电多校HDU 6579 Operation (线性基 区间最大)题解
题意: 强制在线,求\(LR\)区间最大子集异或和 思路: 求线性基的时候,记录一个\(pos[i]\)表示某个\(d[i]\)是在某个位置更新进入的.如果插入时\(d[i]\)的\(pos[i]\) ...
- 杭电多校HDU 6586 String(预处理 + 贪心)题解
题意: 给你一个串,现需要你给出一个子序列,满足26个约束条件,\(len(A_i) >= L_i\) 且 \(len(A_i) <= R_i\), \(A_i\)为从a到z的26个字母. ...
- 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)
以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...
随机推荐
- Spring Validation 验证
基本配置 1.pom引入maven依赖 <dependency> <groupId>javax.validation</groupId> <artifactI ...
- 响应式编程库RxJava初探
引子 在读 Hystrix 源码时,发现一些奇特的写法.稍作搜索,知道使用了最新流行的响应式编程库RxJava.那么响应式编程究竟是怎样的呢? 本文对响应式编程及 RxJava 库作一个初步的探索. ...
- 相对论中的光速c不变,这么讲!你总能理解了吧!
今天谈谈相对论的假设基础--光速不变,很多人都知道爱因斯坦的相对论,也知道相对论的理论基础是光速不变,即无论参考哪个参照系,光的速度都是不变的,这个很难得理解的问题.我之前看过别人的理解,也自己思考怎 ...
- maven project builder fails when running on jdk>9
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.plexus.archiver.jar.JarArchi ...
- Map转换为格式化的YAML字符串
yaml与java对象的互转 yaml与java对象的互转有snakeyaml <dependency> <groupId>org.yaml</groupId> & ...
- 精通MySQL之锁篇
老刘是即将找工作的研究生,自学大数据开发,一路走来,感慨颇深,网上大数据的资料良莠不齐,于是想写一份详细的大数据开发指南.这份指南把大数据的[基础知识][框架分析][源码理解]都用自己的话描述出来,让 ...
- Navicat,Dbeaver,heidiSql,DataGrip数据库连接工具比较
Navicat,Dbeaver,heidiSql,DataGrip数据库连接工具比较 1.Navicat 2.DBeaver 3.heidiSql 4.DataGrip 1.Navicat Navic ...
- 后台获取日期值,前台Js对日期进行操作
需求描述: 方法一: 方法二: 一些标签常用隐藏方法: 需求描述: 在初始化页面的时候,需要根据系统当前的时间对前台JSP页面的某项进行值的初始化,若前台JSP标签没有相关可以初始化的属性,那么可以从 ...
- 初入Java坑,然后又入产品坑
之前工作了一年,从事Java相关工作,不小心深得领导器重,跑去演讲.写文档.与客户沟通等,最后应公司需要,转往产品坑,坑坑相连,何时逃坑. 最近一直在学习产品经理必备工具Axure,发现这真是一个神奇 ...
- 天天写同步,5种SpringMvc异步请求了解下!
引言 说到异步大家肯定首先会先想到同步.我们先来看看什么是同步? 所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 简单来说,同步就是必须一件一件事做,等前一件 ...