2023CYEZOI 线下比赛日记2

书接上回

Day 7

正常比赛,但是第二题打得不好。赛时码

T1 弹珠

标签:dp

划分数字,因为最小表示法,所以 f ( i , j , k ) f(i,j,k) f(i,j,k) 表示第 i i i 容器,还有 j j j 发弹珠,上一个容器 k k k 个。复杂度 O ( n 3 ) \mathcal{O(n^3)} O(n3)

考虑优化,因为 i i i 后面的数字均不小于 k k k,所以不妨将 k k k 固定为 1 1 1,转而改变 j j j。假设这个容器决定放 a a a 个,则 f ( i , j ) + = f ( i + 1 , j − a − ( k − i ) ( a − 1 ) ) f(i,j)+=f(i+1,j-a-(k-i)(a-1)) f(i,j)+=f(i+1,ja(ki)(a1)),详细见代码

赛时期望 100 100 100,实际 100 100 100,表现良好。

T2 无线网路发射器选址

标签:单调栈,递推

观察数据范围,发现可以 O ( n 2 ) \mathcal{O(n^2)} O(n2) O ( n 2 log ⁡ n ) \mathcal{O(n^2\log n)} O(n2logn),那么考虑枚举一个 n n n。递推一个点向上最多延申几格,那么对于每一行,即求

在这里插入图片描述

这是 oiwiki 上笛卡尔树的例题,是比赛后一小时之内正好看到的,但是这里做高度的单调栈就可以做。

赛时期望 40 40 40,实际 40 40 40。是单调栈没想到。

code

T3 联合权值

标签:树,dp,组合计数

题目给了树的形状,然后求总方案数。因为形状固定,所以考虑拆解(这个思想可以参考 noip2022 t1 种花),首先是单链,记为 f 0 ( u ) f_0(u) f0(u),相当于子树。然后考虑类似 4 号节点的位置 f 1 ( u ) f_1(u) f1(u),即为两条不同单链的方案数,组合计数求出(是一种很典型的求两个不同子树中的点的组合)。然后是 1 的位置,由一个 f 1 ( u ) f_1(u) f1(u) 和两个 f 0 ( u ) f_0(u) f0(u) 推出,为 f 2 ( u ) f_2(u) f2(u)。最后用 f 3 ( u ) f_3(u) f3(u) 统计根。注意 f 3 → f 2 → f 1 f_3\to f_2\to f_1 f3f2f1 为链,需要迭代自身。

期望实际均为 0 0 0,赛时看不懂题(似乎最后一个要求表明匹配图的方向性?),但是如果看懂也不一定想得到这样,肯定会弄一个很复杂的循环或递归。这题的启示是可以通过 d p dp dp 来理清思路。

code

Day 8

没打

Day 9

小丑比赛,数论不会,第三题没有仔细思考。赛时代码

T1 uria

标签:数论,线性筛

数论题。给出 n n n,求多少对无序 ( a , b ) (a,b) (a,b),使 a + b ≤ n , ( a + b ) ∣ a b a+b\leq n,(a+b)\mid ab a+bn,(a+b)ab。设 ( a , b ) = g (a,b)=g (a,b)=g,则有 a = x g , b = y g a=xg,b=yg a=xg,b=yg,其中 x , y ∈ Z + x,y\in\Z^+ x,yZ+。那么 ( x + y ) ∣ x y g (x+y)\mid xyg (x+y)xyg,这里需要知道 x ⊥ y , ( x + y ) ∤ x y x\perp y,(x+y)\nmid xy xy,(x+y)xy,证明: x ⊥ y , ( x + y ) ⊥ y , ( x + y ) ⊥ x , ( x + y ) ⊥ x y x\perp y,(x+y)\perp y,(x+y)\perp x,(x+y)\perp xy xy,(x+y)y,(x+y)x,(x+y)xy。所以 ( x + y ) ∣ g (x+y)\mid g (x+y)g,而 g x + g y ≤ n , ( x + y ) ≤ g gx+gy\leq n,(x+y)\leq g gx+gyn,(x+y)g,所以 ( x + y ) ≤ ⌊ n ⌋ (x+y)\leq\lfloor\sqrt n\rfloor (x+y)n 。考虑枚举 i = x + y i=x+y i=x+y,则 g g g ⌊ ⌊ n i ⌋ i ⌋ \lfloor\frac{\lfloor\frac{n}{i}\rfloor}{i}\rfloor iin 个合法值,进而考虑 x , y x,y x,y,因为欧拉函数 φ ( i ) = ∑ x ∈ [ 1 , i ] [ x ⊥ i ] \varphi(i)=\sum_{x\in[1,i]}{[x\perp i]} φ(i)=x[1,i][xi],而对于 x ⊥ i x\perp i xi,又有 y = i − x ⊥ i y=i-x\perp i y=ixi,所以这样的 x , y x,y x,y φ ( i ) \varphi(i) φ(i) 个。因为 x , y ∈ Z + x,y\in\Z^+ x,yZ+ 所以 i i i 2 2 2 开始枚举。 a n s = ∑ i ∈ [ 2 , ⌊ n ⌋ ] ⌊ ⌊ n i ⌋ i ⌋ φ ( i ) ans=\sum_{i\in[2,\lfloor\sqrt n\rfloor]}{\lfloor\frac{\lfloor\frac{n}{i}\rfloor}{i}\rfloor\varphi(i)} ans=i[2,n ⌋]iinφ(i)

赛时暴力 20 20 20,符合预期,但是很烂。code

T2 hamon

标签:dp,线段树

第一问模板题,设 f ( i ) = m a x j < i , a j < a i f j + 1 f(i)=max_{j<i,a_j<a_i}f_j+1 f(i)=maxj<i,aj<aifj+1,第二问设 g ( i ) g(i) g(i) 表示以 i i i 位结尾的 lis 的方案数,那么 g ( i ) = ∑ j < i , a j < a i , f j = f i − 1 g j g(i)=\sum_{j<i,a_j<a_i,f_j=f_i-1}g_j g(i)=j<i,aj<ai,fj=fi1gj。此时可以得到 O ( n 2 ) \mathcal{O(n^2)} O(n2) 的优秀算法,以下考虑优化。因为是区间查询,想到使用线段树维护。建立 m a x f i maxf_i maxfi 棵以 a i a_i ai 为下标, g i g_i gi 为值的权值线段树(动态开点),单次查询已经决定了 f j = f i − 1 f_j=f_i-1 fj=fi1,然后区间查询就可以了,更新是单点修改,不需要标记,但是如果 f i = 1 f_i=1 fi=1,则要 g i = 1 g_i=1 gi=1

赛时满分。

T3 raviel

标签:递推,组合计数

不难发现,各层的节点数,黑节点数,白节点数皆为斐波那契数列,只是开始层数不同。记 w i w_i wi 表示第 i i i 层的白节点数, s w i sw_i swi 表示 w i w_i wi 的前缀和, b i b_i bi 表示第 i i i 层的黑节点数, s b i sb_i sbi 表示 b i b_i bi 的前缀和。可以发现,两个白色节点的位置关系只有两种情况:

  1. 直接祖宗关系,lca 为白点
  2. 非直接祖宗关系,lca 为黑点

对第一种情况,路径长为 i i i 的答案为 s w n − i w i + 1 sw_{n-i}w_{i+1} swniwi+1 s w n − i sw_{n-i} swni 可以理解为前 n − i n-i ni 行的白点都可以为深度 i i i 的子树的根。

对第二种情况,设左深度为 i i i,右深度为 j j j,那么对 i + j i+j i+j 的贡献为 s b n − m a x ( i , j ) w i w j + 1 sb_{n-max(i,j)}w_iw_{j+1} sbnmax(i,j)wiwj+1

赛时没足够时间研究,所以写了暴力。正解码 code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值