题意: 最低等级\(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\)有两种情况…
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 design…
题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $l$ 层到 $j$ 层的期望代价. 分析 这种期望具有可加性,因此,维护一个前缀和 $sum[i]$:从 $1$ 到 $i$ 的期望. 设从 $i$ 到 $i+1$ 的期望代价为 $E$,则有 $E = a_i + (1-\frac{r_i}{s_i})(sum[i]-sum[x_i]+E)$ 解得…
hdu题面 Time limit 5000 ms Memory limit 524288 kB OS Windows 解题思路 因为升级只能一级一级地升,所以所求期望满足了区间加的性质,可以一级一级地算,然后求前缀和.输出(状态不好,临博客涕零,不知所言) 接着扔链接(留坑) 这篇博客推公式的时候好像有些地方下标有点错,而且推公式的过程省了不少(雾)https://blog.csdn.net/toohandsomeIeaseId/article/details/99357608 这篇推公式的方向…
题意: 一个游戏,有许多关,到下一关要花费金钱,做出尝试,有概率成功,若成功则到达下一关,若失败则停在此关或退回到前面某关,询问第l关到第r关的期望费用 题解: 显然,第r关到第l关的费用是dp[r]-dp[l] 那么如何算出dp数组呢?首先dp[1]=0,利用期望方程正推 假设i点,成功率为p,失败则跳到j,成功则跳到k,花费q,则期望方程为 dp[k]=dp[i]+p(q)+(1-p)(dp[k]-dp[j]) 移项后递推即可 #include<bits/stdc++.h> using n…
题意: 定义一个串为\(super\)回文串为: \(\bullet\) 串s为主串str的一个子串,即\(s = str_lstr_{l + 1} \cdots str_r\) \(\bullet\) 串s为回文串 \(\bullet\) 串\(str_lstr_{l + 1}...str_{\llcorner (l + r) / 2 \lrcorner}\)也是回文串 问长度为1.2.3 \(\cdots n\)的\(super\)回文串分别出现了几次 思路: 回文树建一下,然后每次新建一个…
题意: 有\(n\)根长度不一的棍子,q次询问,求\([L,R]\)区间的棍子所能组成的周长最长的三角形.棍长\(\in [1, 1e9]\),n\(\in [1, 1e5]\). 思路: 由于不构成三角形的数组为菲波那切数列,所以当棍数超过44时,长度超过1e9,所以从最大开始数最多不超过45次就能找到构成三角形.所以直接主席树查询区间第k大.复杂度\(O(45 * q * logn)\). 代码: #include<map> #include<set> #include<…
题意: 强制在线,求\(LR\)区间最大子集异或和 思路: 求线性基的时候,记录一个\(pos[i]\)表示某个\(d[i]\)是在某个位置更新进入的.如果插入时\(d[i]\)的\(pos[i]\)小于我当前插入的\(pos[r]\),那么就用当前插入的数换出原来的\(d[i]\),继续进行插入并更新\(pos\),这样就能保证所有的异或和都没有丢失.这样我们只要每次保存出所有\(dn[r][maxn]\)表示最右边为\(r\)时的线性基就可以直接求出所有区间\([L,R]\),\(1 <=…
题意: 给你一个串,现需要你给出一个子序列,满足26个约束条件,\(len(A_i) >= L_i\) 且 \(len(A_i) <= R_i\), \(A_i\)为从a到z的26个字母. 思路: 先用序列自动机(?)构造出某个位置后每个字母的个数,每个字母 的第一个位置. 然后每次贪心地加入最小的字符,加入的条件为当前字母加入后,后面的字符满足剩余的条件. 即剩余的字母\(A_i\)在不超\(R_i\)的情况下能构成k长度的串,剩余的字母\(A_i+\)已拿取字母\(A_i >= L_…
以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之前的状态. 回退的时候,如果暴力点,就直接将每步所操作的线段树都存下来,然后直接翻阅回去,这种方法虽然简单,但是对空间和时间的需求太大了,肯定不能过. 所以这时候我们就可以选择可持久化操作. 可持久化是数据结构里面的一种方法,其总体就是把一个数据结构的历史状态全部都保存下来,从而能够快速的查找之前出…