又来这边苟了一天,感觉可以听学长讲完再回归新初三那边吧,毕竟自己也不是新高二的。。。今天讲题的yhn学长果真是强者,可以在大考连续失误错失rank1,然后高考翻盘进北大。。。
Vasya and Big Integers
题目大意
给出一个大数 (a,l,r) ,求有多少种对 (a) 的划分方法使得划分出来的每一块都在 ([l,r]) 之间。
(a,l,rle 10^{1000000})
思路
这道题我只能讲一下大概的思路,因为我自己并没有过掉,打了两个表才过掉,如果真的有人会看我这个小蒟蒻的博客的话,希望他能帮我看一下哪有问题。。。
我们不难想到设 (f_i) 表示划分到 (i) 的合法方案数,不难得到一个 (Theta(n^2)) 的方法,即暴力转移用 ( ext{hash}) 判断是否合法。
我们又发现,可以转移的点一定是连续的,于是我们可以移动左右端点,然后每次用 ( ext{hash}) 判断两数大小。
时间复杂度 (Theta(nlog n)),其中 (n) 是 (a) 的位数,假设 (l,r) 的位数与 (n) 同阶。
虽然说起来很简单,但是有一些有关前导零的细节,还有一些奇奇怪怪的问题,所以实现起来很麻烦。。。
( exttt{Code})
Recovering BST
题目大意
给出一个 (n) 的二叉树的中序遍历结果,求出是否存在一种方法使得该树一条边连接两点的点权 (a_i) 的 (gcd) 不为 (1) 。
(nle 700,a_ile 10^9)
思路
比较上一道实现起来比较简单。。。
不难想到一个dp方法,设 (f_{l,r,0/1}) 表示 ([l,r]) 作为父节点的左/右区间的合法性,然后就可以做到 (Theta(n^3)) 。
( exttt{Code})
Helping People
题目大意
给出一个长度为 (n) 的序列,第 (i) 个点的初值为 (a_i) ,有 (m) 次操作,每次有 (p_i) 的概率将 ([l_i,r_i]) 集体加 (1) ,问最后最大值的期望。
(nle 10^5,mle 5000),并且操作区间要么不相交要么完全包含。
思路
本来想用 ( ext{Min-Max}) 容斥,但是看到 (nle 10^5) 就放弃了。需要注意的是 :最大值的期望不等于期望的最大值 (这个学过期望的应该都明白吧?)
期望突破点就在于操作区间的关系,可以看出这个其实就是一个树形结构。然后我们就可以树形dp了,我们可以设 (f_{u,i}) 表示 (u) 这个区间最大值小于等于 ((i+max_{j=l}^{r}a_j)) 的概率,然后转移就很简单了,具体见代码。最后的答案也很好求,这里就不赘述了。
时间复杂度为 (Theta(m^2)) 。