2019 杭电多校 7 1011

题目链接:HDU 6656

比赛链接:2019 Multi-University Training Contest 7

Problem Description

Cuber QQ always envies those Kejin players, who pay a lot of RMB to get a higher level in the game. So he worked so hard that you are now the game designer of this game. He decided to annoy these Kejin players a little bit, and give them the lesson that RMB does not always work.

This game follows a traditional Kejin rule of "when you are level i, you have to pay \(a_i\) RMB to get to level \(i+1\)". Cuber QQ now changed it a little bit: "when you are level \(i\), you pay \(a_i\) RMB, are you get to level \(i+1\) with probability \(p_i\); otherwise you will turn into level \(x_i (x_i\le i)\)".

Cuber QQ still needs to know how much money expected the Kejin players needs to ``ke'' so that they can upgrade from level \(l\) to level \(r\), because you worry if this is too high, these players might just quit and never return again.

Input

The first line of the input is an integer t, denoting the number of test cases.

For each test case, there is two space-separated integers \(n (1\le n\le 500 000)\) and \(q (1\le q\le 500 000)\) in the first line, meaning the total number of levels and the number of queries.

Then follows \(n\) lines, each containing integers \(r_i, s_i, x_i, a_i\) \((1\le r_i\le s_i\le 10^9, 1\le x_i\le i, 0\le a_i\le 10^9)\), space separated. Note that \(p_i\) is given in the form of a fraction \(\frac{r_i}{s_i}\).

The next \(q\) lines are \(q\) queries. Each of these queries are two space-separated integers \(l\) and \(r\) \((1\le l < r\le n+1)\).

The sum of \(n\) and sum of \(q\) from all \(t\) test cases both does not exceed \(10^6\).

Output

For each query, output answer in the fraction form modulo \(10^9+7\), that is, if the answer is \(\frac{P}{Q}\), you should output \(P\cdot Q^{−1}\) modulo \(10^9+7\), where \(Q^{−1}\) denotes the multiplicative inverse of \(Q\) modulo \(10^9+7\).

Sample Input

1
3 2
1 1 1 2
1 2 1 3
1 3 3 4
1 4
3 4

Sample Output

22
12

Solution

题意:

从 \(i\) 级升级到 \(i + 1\) 级需要花费 \(a_i\) RMB,成功的概率为 \(p_i = \frac{r_i}{s_i}\),若失败则降到 \(x_i\) 级,然后给出 \(q\) 个询问求 \(l\) 级升级到 \(r\) 级花费的期望。

题解:

期望DP 逆元

设 \(g(l, r)\) 为 \(l\) 升到 \(r\) 的期望,这种期望满足减法 \(g(l, r) = g(1, r) − g(1, l)\)。因为升级只能一级一级升, 所以要从 \(1\) 升级到 \(r\), 必然要经过 \(l\)。可以降维,用 \(dp[i]\) 表示从 \(1\) 升到 \(i\) 的期望,则 \(g(l, r) = dp[r] − dp[l]\)。

从 \(dp[i]\) 转移至 \(dp[i + 1]\),假设尝试了 \(t\) 次才成功,那么也就是前面 \(t - 1\) 次都是失败的,所以下一状态的花费为当前状态的花费 + 成功的花费 + 失败的花费 + 失败后再次回到当前状态的花费。于是:

\[dp[i + 1] = dp[i] + 1 \times a[i] + (t - 1) \times a[i] + (t- 1) \times (dp[i] - dp[x_i])
\]

又 \(\frac{t - 1}{t} = 1 - \frac{r_i}{s_i}\),即 \(t = \frac{s_i}{r_i}\)

于是状态转移方程为:

\[dp[i + 1] = dp[i] + \frac{s_i}{r_i} \times a[i] + (\frac{s_i}{r_i} - 1) \times (dp[i] - dp[x_i])
\]

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 5e5 + 10;
const ll mod = 1e9 + 7; ll r[maxn], s[maxn], x[maxn], a[maxn]; ll dp[maxn]; ll qmod(ll a, ll b, ll p) {
ll ans = 1;
while(b) {
if(b & 1) ans = (a * ans) % p;
a = (a * a) % p;
b >>= 1;
}
return ans;
} int main() {
int T;
cin >> 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]);
ll t = (s[i] * qmod(r[i], mod - 2, mod)) % mod;
dp[i + 1] = (dp[i] + (t * a[i]) % mod + ((t - 1) * (dp[i] - dp[x[i]])) % mod + mod) % mod;
}
for(int i = 0; i < q; ++i) {
int l, r;
scanf("%d%d", &l, &r);
printf("%lld\n", (dp[r] - dp[l] + mod) % mod);
}
}
return 0;
}

HDU 6656 Kejin Player (期望DP 逆元)的更多相关文章

  1. 杭电多校HDU 6656 Kejin Player(概率DP)题解

    题意: 最低等级\(level\ 1\),已知在\(level\ i\)操作一次需花费\(a_i\),有概率\(p_i\)升级到\(level\ i+1\),有\(1 - p_i\)掉级到\(x_i( ...

  2. 2019杭电多校第七场 HDU - 6656 Kejin Player——概率&&期望

    题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...

  3. HDU 6656 Kejin Player

    hdu题面 Time limit 5000 ms Memory limit 524288 kB OS Windows 解题思路 因为升级只能一级一级地升,所以所求期望满足了区间加的性质,可以一级一级地 ...

  4. 2019 Multi-University Training Contest 7 Kejin Player 期望dp

    题目传送门 题意:有n个等级,在每个等级花费$ai$的代价有$pi$的几率升到$i+1$级,$1-pi$的概率降级降到$xi$(xi<=i),给出q次询问,每次询问从$l$级到$r$级的代价的期 ...

  5. HDU 4405 Aeroplane chess 期望dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 Aeroplane chess Time Limit: 2000/1000 MS (Java/ ...

  6. HDU 3853 LOOPS:期望dp【网格型】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 题意: 有一个n*m的网格. 给出在每个格子时:留在原地.向右走一格,向下走一格的概率. 每走一 ...

  7. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

  8. hdu多校第七场 1011 (hdu6656) Kejin Player 概率dp

    题意: 一个游戏,有许多关,到下一关要花费金钱,做出尝试,有概率成功,若成功则到达下一关,若失败则停在此关或退回到前面某关,询问第l关到第r关的期望费用 题解: 显然,第r关到第l关的费用是dp[r] ...

  9. HDU 5781 ATM Mechine 期望dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5781 ATM Mechine Time Limit: 6000/3000 MS (Java/Othe ...

随机推荐

  1. CTF隐写——越光宝盒

    0x题目 原题来自于实验吧:http://www.shiyanbar.com/ctf/1992 一句话,和一个PNG图片. 0x解题 1.下载图片以后,发现打不开. 首先想到的就是文件头可能被修改了, ...

  2. 调整WebBrowser的默认浏览器内核版本

    原文出自:https://my.oschina.net/Tsybius2014/blog/492107 注:这个是写.net控件,其实delphi是一样的.作者已经写的比较全面了,我只是做了一点修改 ...

  3. 简单gui

    import java.awt.Button; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt. ...

  4. token的创建及解析

    <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifac ...

  5. selenium学习笔记(1)

    selenium http://selenium-python.readthedocs.io/index.html https://www.seleniumhq.org/projects/ide/ 声 ...

  6. Zookeeper安装配置及简单使用

    我使用的CentOS 7阿里云服务器,ZK依赖JDK,需要先安装jdk并配置jdk环境变量. 1.安装wget: yum –y install wget 2.下载Zookeeper(http://mi ...

  7. ArcGis 创建含孔洞面要素AO C#

    IGeometryCollection geometryCollection = new PolygonClass(); IPointCollection pointCollection_Exteri ...

  8. opensns学习

    根据ThinkPHP官方文档学习opensns框架 主要看了下opensns所用的单一入口模式的意义. 基础 opensns目录结构 index.php 入口文件 Application 应用目录(含 ...

  9. MS14-068利用

    漏洞原理详情后续补上:kerberos 协议实现过程中的某些 bug,致使普通域用户可以任意伪造高权限 PAC,去请求 TGS 从而导致的权限提升,漏洞现在很少遇到了. 一.利用 需要拥有一个域账号的 ...

  10. Linux下载工具-Wget

    一.安装 进入系统后执行: # yum install wget 二.常用命令使用 以下亲测可用:[文件保存在当前命令执行的文件夹中] 1.wget下载单个文件 # wget url(文件地址,如ht ...