日寄 of March,2025

Diery of March,2025

2025 3月 01 周六
5168 字 · 20 分钟

3.1

教练给我们做综合训练了,专题会停一段时间吧。

早上发了 6 道 DP 题,做了两道。

教练让我们写总结了,但是我并不想把这个发过去,因为我可以在这里发电太懒得 push 了。

部分题解

CF1741E

简单题,考虑朴素 DP 方程 dpi=dpjable(j+1,i)=dpj([bj+1=ij][bi=ij])dp _ i = dp _ j \wedge \text{able}(j + 1,i) = dp _ j \wedge ( [b _ {j + 1} = i - j] \vee [b _ i = i - j] )。显然这个是 O(n2)\Omicron(n ^ 2) 的,过不去。

考虑优化,我们可以直接用分类讨论来 O(1)\Omicron(1) 求出 able(j+1,i)\text{able}(j + 1,i),就不用枚举 jj 了。因为 bj+1=ijj=bj+1+ib _ {j + 1} = i - j \Rightarrow j = b _ {j + 1} + i,可以直接拿 dpi1dp _ {i - 1} 去更新 dpi+bidp _ {i + b _ i},同样的,bi=ijj=ibib _ i = i - j \Rightarrow j = i - b _ i,直接拿 dpibi1dp _ {i - b _ i - 1} 更新 dpidp _ i,最后 dpndp _ n 就是答案。

注意边界。

CF1974E

首先一眼背包 DP,只不过背包容量是变化的,但是不影响,我们枚举的时候可以只枚举到当前上界。

但是值域到了 10910 ^ 9,包炸的,发现答案的范围并不大,考虑交换值域定义域,则 dpi,jdp _ {i,j} 表示考虑前 ii 个物品,获取 jj 的幸福值需要的最少钱数,答案就是使 dpn,j(n1)xdp _ {n,j} \le (n - 1) x 成立的最大的 jj

需要注意,中途超过当月上界的话,我们直接复制 dpi1,jdp _ {i - 1,j},也就是不进行转移。

CF1987D

首先,B 可以选择拦截或者不拦截,拦截就需要取走所有的 xx。因此,我们可以写出一个类似背包 DP 怎么又是背包的方程,然后答案就是 mindpn,i\min dp _ {n,i}

3.2 - 3.4

忘带硬盘了,所以没写,放一起吧。

3.2 晚上打了 EUC 的 OM,一道没切,然后就没有然后了。

3.3 是做题,教练抓了 EUC 和 ASC 的题,只能看题解做点简单的了,我太菜了。

3.4 考试。

T1

考虑每一条边对答案的贡献,我们可以大胆猜测,这条边会产生 2wmin{szu,szv}2 w \min \{ sz _ u,sz _ v\} 的贡献,因为小的子树可以连向大的子树,每条路径都会产生贡献。

因此,答案就是 2min{szu,szv}2 \sum \min \{sz _ u,sz _ v\}

T2

神仙结论题,但我按计算几何的方式思考的。

先说结论,Ans=n42Ans = \frac{n - 4}{2},多边形内角和为 180°(n2)180 \degree(n - 2),设 270°270 \degree 的角有 xx 个,则 90°90 \degree 的角有 nxn - x 个,则有

180°(n2)=270°x+90°(nx)2n4=3x+nxx=n42180 \degree (n - 2) = 270 \degree x + 90 \degree (n - x) 2n - 4 = 3x + n - x x = \frac{n - 4}{2}

但是,我就不一样了,我本来想用向量叉乘的,但是懒得写高精度了,于是使用了分类讨论大法。

虽然 O(1)O(n),10min2h\Omicron(1) \to \Omicron(n),10 min \to 2h

T3

首先,我们考虑下面的平行四边形。

红色部分可以通过全等证明。上高中了初二的东西还在追我

则平行四边形的面积为 (a+d)(b+c)(ab+cd)=ac+bd(a + d)(b + c) - (ab + cd) = ac + bd,则 f(p)=[ac+bd=p]f(p) = \sum [ac + bd = p]

我们考虑方程 ab=pab = p 的解的组数,等于 pp 的正因子个数,记为 d(p)d(p),设 i=aci = ac,则 bd=pibd = p - i。则 f(p)=i=0pd(i)d(pi)f(p) = \sum _ {i = 0} ^ p d(i) d(p - i)

直接计算是 O(n2)\Omicron(n ^ 2) 的,过不去,考虑优化。发现这个式子长的就是个卷积的形式,于是,我们可以先预处理出 d(x)d(x),然后用 NTT 优化卷积,最后套个 RMQ 就解决了。

时间复杂度:O(VlnV)\Omicron(V \ln V) 的预处理,O(VlogV)\Omicron(V \log V) 的 NTT,O(tlogV)\Omicron(t \log V) 的 RMQ,可以通过此题。

T4

不会。

3.5

综合训练,只做了一道题,寄。

懒得写题解了。

3.6

考试。

赛时估的是 125pts,但是 T1 我【数据删除】的把 Lf 打成 lf 了,痛挂 20pts。

T2 DP 是想对了,但是没有限制子串长度,100pts → 50pts。关键是赛场上拍了 2000 组愣是没有找到 Hack,我【数据删除】的数据。

电发完了,下面是题解。

T1

我们设 dpi,jdp _ {i,j} 表示有 ii 条同色链,jj 条异色链的期望连通块数,则有转移:

dpi,j={12i+j(dpi,j1+1)+2i+j12i+jdpi,j,j>0dpi1,j+1,j=0Ans=dpX,Y=i=1Y12X+i+i=1X12i1dp _ {i,j} = \begin{cases} \frac{1}{2i + j} (dp _ {i,j - 1} + 1) + \frac{2i + j - 1}{2i + j} dp _ {i,j},j \gt 0 dp _ {i - 1,j + 1},j = 0 \end{cases} \\ Ans = dp _ {X,Y} = \sum _ {i = 1} ^ Y \frac{1}{2X + i} + \sum _ {i = 1} ^ X \frac{1}{2i - 1}

T2

我们设 dpi,jdp _ {i,j} 表示考虑前 ii 项,长度为 2j2j 的答案,用 pair 存起来。

转移非常简单,dpi,j=max{dpi1,j,Merge(dpi1,j1,si,ti)}dp _ {i,j} = \max \{dp _ {i - 1,j},\text{Merge}(dp _ {i - 1,j - 1},s _ i,t _ i)\},则答案为 max{dpn,i}\max \{ dp _ {n,i}\}

需要注意,我们需要钦定一个长度,不然会爆炸

T3

没改。

T4

没改,发现如果全空则答案为 n+m1n + m - 1,悲提 40 pts,因为赛后才注意到。

3.7

今天补概率与期望 DP,同时改了个高斯消元的板子。

补题记录

P4316

期望板,套了个拓扑排序而已。

POJ3071

想到了方程,但没有注意到转移条件导致 WA,参考了题解才发现哪里挂了。

CF768D

简单概率题。

POJ2096

需要一些分类讨论的简单期望题。

P1850

之前写过,方程也列对了,但是因为把 k[i - 1] 打成了 k[i * 1] 还半天没找出来,就去看了之前的代码,所以评个 1.5。

P2473

结合了状压的期望题。

CF24D

高斯消元解决后效性 DP 板子,但是朴素的高斯消元是 O(n3)\Omicron(n ^ 3) 的,会被卡,所以要用对 band-matrix 的高斯消元优化。

P3232

因为把 k[v] 打成了 k[u] 没找到就去看了题解,其他都是自己想对了的。

最糖的一集

3.10

3.8 的改题去了,不想写了。

今天是 DP 专题。

今日份题解

CF1932F

看到题目,10610 ^ 6O(nlogn)\Omicron(n \log n) 预定。我们可以直接设 dpidp _ i 表示前 ii 个点中,钦定第 ii 个必须选的答案,则覆盖了 ii 的区间都不能选,因此只能从最左的端点左侧转移来。

所以,有 dpi=cnti+max0j<posidpjdp _ i = cnt _ i + \max _ {0 \le j \lt pos _ i} dp _ j。所以,预处理阶段我们需要维护区间取 min\min,区间加法,单点查询,转移阶段我们需要维护前缀最大值,单点更新。

因为吉司机线段树是 O(log2n)\Omicron(\log ^ 2 n) 的,所以我们可以先按左端点从大到小排序,维护区间推平,用珂朵莉树;区间加法可以直接前缀和,也可以写一个树状数组。

转移直接拿树状数组优化就好了,答案为 maxdp\max dp

CF1950G

n16n \le 16,考虑搜索,暴搜试过了,会 T。

考虑记忆化,我们 DFS 函数可以设计为 int dfs(int pos,int len,int sta),表示位置,长度和选择的状态,返回最大的长度即可。

CF1935C

还以为是背包 DP,其实不是。

观察到,集合中的元素按 bb 排序后,a\sum a 不会变,bibi+1\sum |b _ i - b _ {i + 1}| 会最小,为 maxbminb\max b - \min b

所以,我们考虑先按 bb 从小到大排序,因为值域太大,所以将状态设计为 dpi,jdp _ {i,j} 表示前 ii 个中选 jj 个的最小花费。

则我们有:dpi,1=aibidp _ {i,1} = a _ i - b _ idpi,j=ai+mindpk,j1dp _ {i,j} = a _ i + \min dp _ {k,j - 1}

维护个前缀最大值就能做到 O(n2)\Omicron(n ^ 2) 了。

CF1929D

可以用类似点分治里的路径合并的方式思考,把一条任意路径拆成两条过根结点的路径,则两条路径中危险点的数量和不能超过 33

然后 DP,设 dpi,0/1/2dp _ {i,0/1/2},表示以 ii 为根的子树中有 0/1/20/1/2 个危险点的方案数。

dpi,0dp _ {i,0} 显然为 11dpi,1=(dpv,0+dpv,1)=(dpv,1+1)dp _ {i,1} = \prod (dp _ {v,0} + dp _ {v,1}) = \prod (dp _ {v,1} + 1)dpi,2=(dpv,1+dpv,2)dp _ {i,2} = \sum (dp _ {v,1} + dp _ {v,2})

答案为 dp1\sum dp _ 1

CF1926G

首先,我们可以将 C 看作任意一种人,于是,我们设 dpu,0/1dp _ {u,0/1} 表示点 uu 视为 S/P,若本来有值,就把另一个值设为正无穷。

dpu,i=min{dpv,i,dpv,i1+1}dp _ {u,i} = \min \{ dp _ {v,i},dp _ {v,i \oplus 1} + 1 \},最后答案为 mindp1\min dp _ 1

3.11

今天 VP CF Div.2。

思维没有打开,AB 都在 20min 内切了,但是 C 第一次想的构造炸了,心态也跟着炸了。所以导致只做了 22 道题。

其实我应该是可以想出 E 的构造的,但是心态炸了 /

然后就去写概率与期望了。

本来晚上是想打 Div.3 的现场赛的,但是玩战地去了,明天早上打 VP 得了。

3.12

VP Div.3

A

唐题,判断是否 L=R=U=DL = R = U = D 即可。

B

根据样例解释做题,选择两个最小的,然后新的一定比原来的大,这样连环套的只剩一个的时候答案最优。

C

转化式子,题目让我们求的是 x+y>xy>xyx + y \gt x \oplus y \gt x - yyy,再从异或的性质入手,继续转化为 xandy0xandyyx \operatorname{and} y \neq 0 \wedge x \operatorname{and} y \neq y,删去最高位,加上最低位就能了。

D

我们发现 mm 小的可怜,于是从这里入手。通过数学,我们可以求得,直线 x=kx = k 在圆 x2+y2=r2x ^ 2 + y ^ 2 = r ^ 2 上/内部有 r2k2\lfloor \sqrt{r ^ 2 - k ^ 2} \rfloor 个整点,然后直接扫一遍,如果有更大的答案更新即可。

E

神仙构造题,我们首先随便问一个 ABC\triangle ABC,极大的可能会返回一个 PP,通过直觉推断,将一个点换为 PP,里面的点会变少。

然后,就没有然后了,似乎只能推出这么多。

我们先来详细证明一下:

ABC\triangle ABC 中有 cc 个点,APC\triangle APC 中有 c1c _ 1 个,PBC\triangle PBC 中有 c2c _ 2 个,ABP\triangle ABP 中有 c3c _ 3 个,则 c1+c2+c3+1=cc _ 1 + c _ 2 + c _ 3 + 1 = c

根据鸽巢原理,至少有一个 cic13c _ i \ge \frac{c - 1}{3},则我们可以随机的把 A,B,CA,B,C 其中一个替换为 PP,随机到最少的那个的概率是 13\frac{1}{3} 的,因此,只要多随机几遍,我们就能得到一个 c=0c = 0 的三角形。

我不会证,但是期望次数是 77 次左右,远小于 7575

后悔晚上没打这场了 qwqqwq

然后概期有一道题,可以用 DDP 做,就想去学。DDP 是没学会,但是找到了一些矩乘线段树的水题。

3.13

今天考试,总结来说,就是策略没设计好还有出题人戶口本(輕量化)

T1

看到题就觉得肯定极其难写,发现第一个点 r<100r \lt 100,而样例给的是 [1,135][1,135],复制即可。

T2

和期望其实没什么关系的期望题。

赛场上看到级数懵了,推了两个多小时的式子,然后发现假了,就开始打表,发现 n=2,m=2n = 2,m = 2 的性质,然后算错了,痛失 1010 分。

我打表的时候,发现如果有连续的,答案会和没有连续的答案不一样.然后没有想出更多的性质了。

实际上,答案是 mn+pBorder(B)mpm ^ n + \sum _ {p \in \text{Border}(B)} m ^ p

那这样就很简单了,跑一遍 KMP,然后 i = n 后一直 i = next[i] 就是了。

T3

和哈希的题,在赛场上口胡了一个类似莫队的做法,成功没挂 4040,其实出题人把 mm 开到 nlogn\frac{n}{\log n} 我就能过,但是他显然没有。

正解是首先统计出前缀权值数组 ViV _ i,然后 [l,r][l,r] 合法的充要条件显然是 VrVl1V _ r - V _ {l - 1} 的每个值相等。我们可以差分每一个 ViV _ i,记为 CiC _ i,则每次修改完,我们就查询有多少个 Hash(Cj)=Hash(Ci)\text{Hash}(C _ j) = \text{Hash}(C _ i),计入答案即可。

注意哈希函数要设计为 f(x)=f(x)f(-x) = -f(x),即一个奇函数的形式。

T4

定位是签到题,但是出题人倒序放题,发现 uu2u,2u+12u,2u + 1 有依赖关系,考虑建树。然后就是一个简单到极致的树形 DP。

总结

  1. 不要死磕(写几遍了)
  2. 正着做不动倒着做

3.14

综合题。

题解

CF1918D

最大值最小,考虑二分,发现这道题在 DP 题单里面贪心不好维护答案是否合法,考虑 DP,首先,我们可以二分一个段长 xx,则有 DP 方程 dpi=ai+minj<i,sumisumjxdpjdp _ {i} = a _ i + \min _ {j \lt i,sum _ i - sum _ j \le x} dp _ {j},考虑优化,这个式子长的就很单调队列,但是我不会,所以写了线段树。

CF1925D

概率期望题,首先,我们每次都等概率的选到每一个人,于是 ansans+psans \gets ans + p \cdot s,之后,我们都等概率的对每一对人尝试操作,若随机到朋友,则加一,期望为 pmpm,所以 ss+pms \gets s + p \cdot m,计算 kk 次即可。

CF1914F

考虑贪心,我们首先考虑怎么取最优,一定是取两个叶子结点。再考虑取哪两个叶子结点,可以取两个深度最大的,这样它们的父亲更有可能变为叶子。

然后没了。

CF1913D

160020001600 \sim 2000 有道 21002100 的题》。

区间的最大值,考虑笛卡尔树上跑树形 DP。根结点是一定会被保留的,考虑保留的情况,则左右儿子任意,dpudpu+dpls×dprsdp _ u \gets dp _ u + dp _ {ls} \times dp _ {rs},不保留的情况,若有位于左边的父亲,则 dpudpu+dprsdp _ u \gets dp _ u + dp _ {rs},否则,dpudpu+dplsdp _ u \gets dp _ u + dp _ {ls}

CF1900D

其实这是个纯数论题。首先,因为三元组的元素不重复,并且只跟最小的两个数相关,则我们可以直接排序,枚举两个就行,剩下一个任意。

因此答案为 i=1nj=i+1ngcd(ai,aj)×(nj)\sum _ {i = 1} ^ n \sum _ {j = i + 1} ^ n \gcd(a _ i,a _ j) \times (n - j)

考虑优化这个式子,先对 gcd\gcd 进行欧拉反演,化为 i(ni)didjφ(d)=i(ni)diφ(d)[dj]\sum _ {i} (n - i) \sum _ {d | i \wedge d | j} \varphi(d) = \sum _ i (n - i) \sum _ {d | i} \varphi(d) [d | j]

在分解质因数的时候可以算出后面那一项,然后线性筛筛一下 φ\varphi 就好了。

数论的东西也缺。

3.15

考试。

T1

哇原来我还能场切题啊

首先口胡一个结论,对于一个位置 ii,所有包含它的区间设为 ww,其余全部设为 00

严格证明不会,你就想,如果区间内有比它大的,你加的少和加的多都没用,该追不上还是追不上,但是加的多更有机会追上区间外比它大的。

所以,我们可以扫描线过去,遇到一个区间的开始区间加上 ww,遇到结束的后一个位置减去 ww,线段树维护即可,每次单点求值,判断是否与全局最大值相等。

T2

考虑树形 DP,观察到根是否能 AC 只跟根所在的连通块大小有关,则可以用 DP 来求。

dpu,i,0/1dp _ {u,i,0/1} 表示以 uu 为根的子树,给 ii 个点提交,uu 是否过的概率,发现不好转移,则我们再设一个 gu,i,0/1g _ {u,i,0/1},表示不包含 uu,提交了 ii 个点,uu 的儿子是否过的概率,则我们先转移 gg,然后用 gg 的值转移 dpdp

然后在转移的时候,我们建立一个 tmptmp 表示新的 gg(因为我们需要 gg 原来的值),则 tmpi+j,kttmpi+j,kt+Ci+jjdpv,i,kgu,j,ttmp _ {i + j,k \vee t} \gets tmp _ {i + j,k \vee t} + C _ {i + j} ^ j dp _ {v,i,k} g _ {u,j,t},更新完以后,gu,i,0/1tmpi,0/1g _ {u,i,0/1} \gets tmp _ {i,0/1},然后拿去更新 dpdpdpu,i,0gu,i,0+gu,i,1,dpu,i+1,012gu,i,0,dpu,i+1,112gu,i,0+gu,i,1dp _ {u,i,0} \gets g _ {u,i,0} + g _ {u,i,1},dp _ {u,i + 1,0} \gets \frac{1}{2}g _ {u,i,0},dp _ {u,i + 1,1} \gets \frac{1}{2} g _ {u,i,0} + g _ {u,i,1} 就好了。

T3

什么神奇题没改。

T4

赛场上一个假的不能再假的做法,还骗了 7272 虽然在赛后被卡成 16 了就是

我们考虑钦定 ll 是最大值,rr 是最小值,则满足条件的 ll 一定在 [pre+1,r][pre + 1,r] 上,其中 pre=maxj<i,aj<aijpre = \max _ {j \lt i,a _ j \lt a _ i} j,如何确保 ll 最大?我们可以直接建一个单调栈,把 [1,i][1,i] 中的元素加进 DS 里面,查询异或极值就好了。

那么用什么 DS 呢?我们需要区间查询异或极值,则直接用线段树套 01Trie 就是了。

3.17

自习。

因为周六的一场 Div.2 因为 Mike 在玩原神 CF 服务器抽风没打,所以就直接去补题了。

感觉这场 Div.2 比之前打过的都难,B 题都 1500。

然后就是回去补可持久化专题了,嘿嘿该我玩了

今晚打了 Edu,起码没有掉分。

经典过 AC 不过 B。

我突然发现我有个 Cnblogs 的账号,于是我决定把题解全部甩到那上面去。

题解链接

学习笔记和日记会留在这个网站上的,不然我这个网站就没意义了。

3.18 - 3.19

感冒发烧了,回家了,打了一天 BF,3.20 回来了。

3.20

回来了,看见 lx 把我刷下去了,直接翻出我的陈年提交记录~~(坏笑)~~

然后交完一看,欸,zcy 还有比我更早的,zcy 得了 MVP \uparrow

中午把之前一个被卡空间的树套树重新写了一遍。

准备加个像 LOJ 一样的一言,但是这个工程量有点大,慢慢来吧。

3.21

今天考试,挂了 24 分。

题解

只能说思维还是不太行,构造还是太劣了。

图论算法都会,就是不会建图。

3.24

昨天晚上教练叫我们去打了 ARC,但是我去补主席树了,就没好好打

反正今天还是得补题,还有周末的两场 Div.2 的题。

还有我发现我非常擅长把简单的问题复杂化。

明天要模拟体测,还好是在上午。

3.25

真的很烦这种临时变卦的老师,第一节课本来说自愿体测,去自由活动了 20min 就把我们抓回来体测,体测就立定跳远还能看,机房残疾人果然不是吹的。

然后回来做 DP,升难度了,到了 210024002100 \sim 2400,但是有道 1900 的,这个我会,我也只会这个了。

Solution Link

下午开了线性基的专题,先把模板题过了。

3.26

考试,挂了 15pts。究其原因是我 T3 记录答案的时候没有初始化。

Solution Link

下午和 T3 斗智斗勇,然后炸了。看来 DP 还是太弱了。

3.27

又是 DP 综合,但是今天居然做了三道题。

Solution Link

线性基的专题还有两道就做完了,因为八纵八横需要可删除线性基,我又懒得去学所以就写了线段树分治。

J 题需要前缀线性基,考虑不学,使用 lxl ST 表诶嘿嘿。

3.28

呜呜呜今天综合训练一道没切。

有一道原题,但是完全没有思路。

今天事情太多了没写题解,那直接不写得了。还有今天晚饭是真的难吃,幸好还有桶泡面。

明天说是 S 组难度的涨信心模拟赛,看吧。

3.29

还真是涨信心模拟赛,我还能考 224,不挂分还能考 259。

因为题太唐了,也太恶心了,所以不单独写题解了。

T1

纯唐数论题,筛出 [1,106][1,10 ^ 6] 的质数就能求出来了。

T2

大模拟,但是出乎意料的好写。

T3

拿高考数学 20 题改的,结论比较难猜,但是猜出来就很简单。

T4

假期望真数位 DP,太恶心了不改。

3.31

今天拉的是比较简单的一套综合。

Solution Link

除了后面两道神经 DP 其他的我还挺喜欢的。


啊三月份还是有长进的,起码我能自己做 2100 的 DP 题了吧。

蒟蒻时的 DP 债还得慢慢还呢,四月份加油吧。


Thanks for reading!

日寄 of March,2025

2025 3月 01 周六
5168 字 · 20 分钟