首页 > 其他分享 >做题寄录

做题寄录

时间:2022-11-16 20:33:12浏览次数:29  
标签:prod limits 公差 dfrac sum leq 做题 寄录

BS8240

对于一条边连向的两个点,我们只关心他们颜色相同与否。于是可以考虑把 \(n\) 个点分成若干集合,每个集合内部颜色相同,集合之间没有区别。不难发现这就是贝尔数的定义。

注意到 \(bell_{12} = 4213597\),于是当 \(n \leq 12\) 时直接搜索 \(n\) 个点的划分,再乘上 \(k^{\underline{cnt}}\) 即可。

再考虑一棵树的情况,容易设计 $dp_{x,i} $ 表示 \(x\) 颜色为 \(i\) 的总权值然后 \(O(nk)\) 转移,由于颜色之间没有区别,每个 \(i\) 的 \(dp_{x,i}\) 都是一样的,所以可以 \(O(n)\)。

于是就 70 了。

再考虑最后几个点,发现非树边最多只有 \(10\) 条,类似上面的思路,随便找一棵生成树后,对于每条非树边,直接搜索确定一点的颜色,此时设 \(dp_{x,i}\) 表示选择第 \(i\) 种颜色的方案(当 \(i = 0\) 时是未选择的 \(k - cnt\) 种颜色),最后把根据当前点的颜色选择,将其所对应的非树边答案累加。

于是复杂度就是 \(O(bell_{10}nk)\),因为 \(bell_{10}\) 是 1e5 级别,算出来只有 1e8,但会被卡常。

题解的一个解决方案是将 1 度点删去,2 度点将其贡献累加到所连向的两个点。这样每个点度数 \(\geq 3\),于是总点数减少,跑得飞快。

BS8241

建出括号树,对于一个询问 \(x, y(x<y)\) 而言,一定是不断跳,跳到其 lca 的两个儿子,要么直接从 lca 处转换括号,要么从同层括号之间单向移动。

于是只用预处理一个左 / 右括号到其父亲的 左 / 右括号的最小步数,显然可以在建树时用一个 \(2 \times 2\) 的矩阵表示转移。然后大力分讨就 over 了。

还有小清新的直接倍增写法,就是直接对每个点预处理跳 \(2^j\) 能到达的最左 / 最右点,一个跳 $2^j $ 的能到达的最左点要么是最靠左的 \(2^{j - 1}\),要么是最靠右的 \(2^{j - 1}\)。询问类似上面的做法,从两个点开始跳,一直跳到 lca 即可。

BS8236

硬核推柿子题。

首先考虑求出一个点的期望深度,设 \(d_x\) 表示 \(x\) 的期望深度,\(b_x\) 为 \(a_x\) 的前缀和,有转移 \(d_x =\dfrac{\sum\limits_{i = 1}^{x - 1}a_i(d_i+c_i+c_x)}{b_{x - 1}}\),可以通过分离变量做到 \(O(n)\)。

对于询问 \(x,y\),我们想要对于每个 \(l \in [1, x]\),计算出 \(l\) 为 \(x,y\) 的 \(\mathrm{lca}\) 的概率,答案就是 \(d_x+d_y -2\sum\limits_{l}P_ld_l\)。

假设 \(x<y\),直接枚举 \(x - y\) 的路径上经过的点集 \(S_{x,y}\),会发现其由两部分组成:在 \((l,x)\) 上的点可以在 \(l - x\) 的路径上,也可以在 \(l - y\) 上;对于 \((x,y)\) 的点,只能在 \(l - y\) 上,然后 开 幕 雷 击:

\(P_l =\dfrac{a_l^2}{b_{x - 1}b_{y - 1}} \sum\limits_{S_1 \subseteq (l, x)}\sum\limits_{S_2\subseteq (x,y)} \prod\limits_{i \in S_1}\dfrac{2a_i}{b_{i - 1}}\prod\limits_{i \in S_2} \dfrac{a_i}{b_{i - 1}}\)

解释一下:本质上就是一堆点,其 \(\dfrac{a_{p_{i - 1}}}{b_{p_i - 1}}\) 的乘积,只不过把 \(l, x, y\) 的贡献单独处理了,这个柿子在 \(x = l\) 时不成立,需要特殊处理。

然后将 \(\sum\limits_{S_1 \subseteq (l,x)}\prod ...\) 看成每个点选或不选:\(\prod\limits_{i = l+1}^{x - 1}(1+\dfrac{2a_i}{b_{i - 1}}) = \prod\limits_{i = l+1}^{x - 1}\dfrac{a_i+b_{i}}{b_{i-1}}\),右边 \(\prod\limits_{i = x+1}^{y - 1}\dfrac{b_i}{b_{i - 1}} = \dfrac{b_{y - 1}}{b_x}\)。

最后的答案就是 \(d_x+d_y - 2\sum\limits_{l = 1}^{x}d_l \times \dfrac{a_l^2}{b_xb_{x - 1}}\prod\limits_{i = l+1}^{x - 1}\dfrac{a_i+b_{i - 1}}{b_{i - 1}}\)。预处理 \(\dfrac{a_i+b_{i - 1}}{b_{i - 1}}\) 的前缀积即可。

BS8237

题意就是划分成两个公差相同的等差数列(可以有一个为空),直观感受一下,这个公差不会太大。

为了方便确定公差的范围,我们不妨将公差 \(d\) 的上界和下界写出来,并枚举首项 \(b\):

最少的操作次数 \(mn = \dfrac{\frac{n(n-1)}{2}d+bn - \sum a_i}{2}\),\(mx = \dfrac{a_{mx} \times n - \sum a_i}{2}+2n\),由于 \(mn \leq mx\),最后发现 \(nd \leq 1e6\)。

这意味着我们可以直接暴力枚举 \(d \in [-\dfrac{lim}n, \dfrac {lim}n]\),然后再花 \(O(n) - O(n \log n)\) 的时间得到让一段前缀 / 后缀变成公差为 \(d\) 的等差数列的答案,然后用 \(pre\) 和 \(suf\) 拼起来。

设 \(c_i = a_i - (i - 1) \times d\),那么对于一个首项 \(b\),对于 \(c_i - b \leq 0\) 的贡献而言,若 \(b - c_i\) 为偶数,就可以一直进行 +2 操作,次数就是 \(\dfrac{b - c_i}2\),否则需要加到 1 后减去 1,贡献就是 \(\dfrac{b+3 - c_i}{2}\);对于 \(c_i - b > 0\) 的贡献就是 \(c_i - b\)。

注意到这类似带权中位数问题,对于 \(c_i \leq b\),贡献可近似看做 \(\dfrac{b - c_i}2\),\(c_i > b\) 就是 \(c_i - b\)。根据数学??积累可知:\(b\) 取 \(c[n - \left\lceil \frac n 3\right\rceil+1]\) 取到,由于奇偶性的问题,还需要代入该值 -1 检验。

考虑动态维护这个过程,我们需要动态维护前 \(n - \left\lceil \frac n 3\right\rceil+1\) 的奇 / 偶个数以及和,后 \(\left\lceil \frac n 3\right\rceil\) 的个数以及和就可以 \(O(1)\) 计算答案了。

用对顶堆时刻维护该过程,时间复杂度 \(O(nd \log n)\)。

标签:prod,limits,公差,dfrac,sum,leq,做题,寄录
From: https://www.cnblogs.com/henrici3106/p/16897411.html

相关文章

  • 【做题笔记】CF1528B Kavi on Pairing Duty
    ProblemCF1528BKavionPairingDuty题目大意:在数轴上有\(2n\)个点,相邻两个点的距离为\(1\)。现在要将这些点两两匹配成\(n\)个圆弧,要求任意两个圆弧要么等长,要么......
  • 做题记录
    P3157[CQOI2011]动态逆序对链接考虑一个逆序对在什么时候会对答案造成影响。假设我们想要找到第\(i\)个结点被删除时所减少的逆序对个数。记\(a_i\)表示第\(i\)......
  • HNCTF的pyjail做题过程详解
    简述:因为本人对python的内置函数理解也不是深入,在做题过程中也是靠着出题人的hint和google大法才做出来几题,详细的解题过程和知识点讲解可以看一下春哥的知乎,[PyJail]pyt......
  • 做题记录
    CF1746DCF1746F随机化,随机赋权值,每次判断区间和是否满足。只会把NO判成YES。当k=2,概率还是蛮高的,\(1/2\)吧。CF1750C,考虑\(a[i]^b[i]\)必须相等。那么两......
  • 做题小结
    221103平衡树练习(结果并不是都必须用平衡树)。P5338[TJOI2019]甲苯先生的滚榜注意这道题里面生成数据的种子是unsigendint类型,所以一定小心#defineintlonglong......
  • AGC做题记录
    AGC做题记录从比较远古的题开始做起吧。AGC001C经典题。考虑直径中点,讨论长度奇偶性直接\(O(n^2)\)做就行。提交记录D不是很难的构造题。思考题目给出的条件,不难......
  • 做题记录总览
    写在前面做过的题太多了,分成了好几个。为例方便查看,特建此目录。实时更新。DPPart1DSPart1数学Part1数数Part1贪心Part1DP优化Part1杂题Part1......
  • ATcoder F 做题记录
    ABC273F简要题意一个人要沿数轴从\(0\)处走到\(x\)处,数轴上有一些障碍,每个障碍有一把对应的锤子可以将其销毁,给定障碍和锤子的坐标及\(x\),求最短路长。简要题......
  • 做题笔记 - 重要
    1.****** for循环中的赋值语句只能使用平行赋值,不能用多个表达式正确用法:fori,j:=len(num1)-1,len(num2)-1;...错误用法:fori:=len(num1)-1,j:= le......
  • PHP反序列化做题方法
    1.简化:把PHP代码复制到编辑器里面,寻找PHP反序列化的魔术方法,然后把不需要的部分删去2.找链子:通过以知的魔术方法,寻找到可以利用的点,然后想办法通过对象与方法的调用执行......