2021洛谷11月月赛1游记

才打了 200   p t s 200 \ pts 200 pts,退步了。

传送门

【 L G R − 096 】 洛 谷   11   月 月 赛   I   \rm 【LGR-096】洛谷~11~月月赛~I~ LGR096 11  I 

Prob A. Addition (Statement)

有一个初始长度为 n n n 的序列 a a a。你需要进行 n − 1 n − 1 n1 次操作。每一次操作先选出两个相
邻的数 x , y x, y x,y 并删掉(原序列中 x x x y y y 左边),再往原位置插入一个 x + y x + y x+y 或一个 x − y x − y xy。求
n − 1 n − 1 n1 次操作之后能最终剩下的数的最大值。 1 ≤ n ≤ 1 0 5 1 ≤ n ≤ 10^5 1n105, ∣ a i ∣ ≤ 1 0 9 |ai| ≤ 10^9 ai109

分值 n n n a b s ( a i ) abs(a_i) abs(ai)特殊性质
S u b t a s k   1 Subtask\ 1 Subtask 1 10 10 10 ≤ 2 \leq 2 2无特殊限制
S u b t a s k   2 Subtask\ 2 Subtask 2 20 20 20 ≤ 100 \leq100 100无特殊限制
S u b t a s k   3 Subtask\ 3 Subtask 3 5 5 5无特殊限制无特殊限制 a i ≥ 0 a_i \ge 0 ai0
S u b t a s k   4 Subtask\ 4 Subtask 4 30 30 30无特殊限制 ≤ 1 \leq 1 1
S u b t a s k   5 Subtask\ 5 Subtask 5 35 35 35无特殊限制无特殊限制
Subtask 1

输出 max ⁡ ( a 1 + a 2 , a 1 − a 2 ) \max(a_1 + a_2, a_1 − a_2) max(a1+a2,a1a2)。期望得分 10 10 10 分。

Subtask 2

区间 dp f l , r , g l , r f_{l,r}, g_{l,r} fl,r,gl,r 表示只考虑 [ l , r ] [l, r] [l,r] 时的最大/最小答案。
枚举 i i i 表示最后一次合并的位置,容易得出转移方程式:

f l , r = max ⁡ i − 1 r − 1 f l , i + f i + 1 , r , f l , i − g i + 1 , r f_{l,r} = \max\limits_{i-1}^{r-1}{f_{l,i} + f_{i+1,r}, f_{l,i} − g_{i+1,r}} fl,r=i1maxr1fl,i+fi+1,r,fl,igi+1,r

g l , r = min ⁡ i − 1 r − 1 g l , i + g i + 1 , r , g l , i − f i + 1 , r g_{l,r} = \min\limits_{i-1}^{r-1}{g_{l,i} + g_{i+1,r}, g_{l,i} − f_{i+1,r}} gl,r=i1minr1gl,i+gi+1,r,gl,ifi+1,r

时间复杂度 O ( n 3 ) \mathcal{O}(n^3) O(n3)。期望得分 30 30 30 分。

Subtask 3

输出 ∑ i = 1 n a i \sum\limits_{i=1}^{n}a_i i=1nai。期望得分 5 5 5 分。

Subtask 4

输出 a 1 + ∑ i = 2 n ∣ a i ∣ a_1 + \sum\limits_{i=2}^{n}|ai| a1+i=2nai

依次加入每一个数,假设当前答案是 x x x,新加入的数是 w w w

如果 w < 0 w < 0 w<0 x − = w x− = w x=w。否则 x + = w x+ = w x+=w

显然这样可以得到最大答案。时间复杂度 O ( n ) \mathcal{O}(n) O(n)

Prob B. Lines (Statement)

平面直角坐标系中有 n n n 条直线,任意 3 3 3 条直线不交于一点且没有两条直线重合。现在
这些直线形成了不超过 n ( n − 1 ) 2 \frac{n(n − 1)}{2} 2n(n1) 个交点,请你求出至少选取其中几条直线才能覆盖到所
有交点。 1 ≤ n ≤ 1 0 5 , ∣ a ∣ , ∣ b ∣ , ∣ c ∣ ≤ 1 0 9 1 ≤ n ≤ 10^5, |a|, |b|, |c| ≤ 10^9 1n105,a,b,c109

分值 n n n特殊性质
S u b t a s k   1 Subtask\ 1 Subtask 1 10 10 10 ≤ 20 \leq20 20
S u b t a s k   2 Subtask\ 2 Subtask 2 30 30 30 ≤ 100 \leq100 100
S u b t a s k   3 Subtask\ 3 Subtask 3 10 10 10无特殊限制 a b = 0 ab=0 ab=0
S u b t a s k   4 Subtask\ 4 Subtask 4 50 50 50无特殊限制
Subtask 1

暴力枚举每一条直线是否选择,判断是否合法。期望得分 10 10 10 分。

Subtask 2

假设 a = 0 a = 0 a=0 的有 t t t 条。输出 min ⁡ ( t , n − t ) \min(t, n − t) min(t,nt)。期望得分 10 10 10 分。

Subtask 3

没有删掉的直线一定是互相平行的,否则一定有至少一个交点没有被删掉。所以其实就是
要选出最多的直线使它们两两平行。
对于每一条直线暴力找出有多少条直线与它平行,取最大值即可。
时间复杂度 O ( n 2 ) \mathcal{O}(n^2) O(n2) O ( n 2 log ⁡ n ) \mathcal{O}(n^2 \log n) O(n2logn)。期望得分 40 40 40 分。

Subtask 4

对斜率排序或用 map 统计。时间复杂度 O ( n log ⁡ n ) O(n \log n) O(nlogn)。期望得分 100 100 100 分。

C. ABC (Statement)

给定一个长度为 n n n 的只包含 A, B, C 的字符串 S S S,你可以进行若干次操作,每次操作为:

  • 先选择一个区间 [ l , r ] [l, r] [l,r],你需要保证 1 ≤ l ≤ r ≤ n 1 ≤ l ≤ r ≤ n 1lrn

  • 再选择三个字符 p A , p B , p C ∈ A , B , C pA, pB, pC \in {A, B, C} pA,pB,pCA,B,C,并将 S l . . . r S_{l...r} Sl...r 中所有 A 变为 p A pA pA,所有 B 变为 p B pB pB
    所有 C 变为 p C pC pC p A pA pA, p B pB pB, p C pC pC 可以相等。

    你的目标是用最小的操作数使得任意相邻两个字符不同。要求构造方案。

    1 ≤ n ≤ 5 × 1 0 3 1 ≤ n ≤ 5 × 10^3 1n5×103

Subtask 1

输出 0 0 0。期望得分 1 1 1 分。

Subtask 2

暴搜。期望得分 20 20 20 分。

Subtask 3

把所有偶数位置改为 B。期望得分 10 10 10 分。

Subtask 4 ∼ 6

假设 a i = a i + 1 a_i = a_{i+1} ai=ai+1 的位置个数为t,显然答案 ≥ ⌈ t 2 ⌉ \ge \left\lceil \frac{t}{2} \right\rceil 2t 考虑构造方案达到这个下界。
对于每一个 a i = a i + 1 a_i = a_{i+1} ai=ai+1 的位置在 i i i i + 1 i + 1 i+1 之间切一刀,最终将序列分出 t + 1 t + 1 t+1 段。
对于所有编号为偶数的段执行一次 p A = pA = pA= B, $pB = $ C, $pC = $ A 的操作。
因此操作次数是 ⌊ t + 1 2 ⌋ = ⌈ t 2 ⌉ \left\lfloor \frac{t+1}{2} \right\rfloor= \left\lceil \frac{t}{2} \right\rceil 2t+1=2t,达到下界,正确性显然。
时间复杂度 O ( n ) \mathcal{O}(n) O(n)。期望得分 100 100 100 分。

D. Permutation (Statement)

对于一个 1 ∼ n 1 \sim n 1n 的排列 p p p,定义 G p G_p Gp 为使用以下方法构造出来的无向图:

  • 对于每一个 i ∈ ( 1 , n ] i \in (1, n] i(1,n],找到最大的 j ∈ [ 1 , i ) j \in [1, i) j[1,i) 满足 p i > p j p_i > p_j pi>pj,然后连一条 i , j i, j i,j 之间的边,
    如果不存在这样的 j j j 则不连。

    给定一棵有 n n n 个节点的树T。把 p p p 称为好排列当且仅当 G p G_p Gp T T T 同构。如果存在好排

    列,输出其中字典序最大的一个。否则输出 − 1 −1 1 1 ≤ n ≤ 5 × 1 0 3 1 ≤ n ≤ 5 × 10^3 1n5×103

分值 n n n特殊性质
S u b t a s k   1 Subtask\ 1 Subtask 1 15 15 15 ≤ 8 \leq 8 8
S u b t a s k   2 Subtask\ 2 Subtask 2 5 5 5无特殊限制树退化为一条链
S u b t a s k   3 Subtask\ 3 Subtask 3 15 15 15无特殊限制度数 ≥ 3 ≥ 3 3 的节点个数 ≤ 1 ≤ 1 1
S u b t a s k   4 Subtask\ 4 Subtask 4 20 20 20 ≤ 100 \leq 100 100
S u b t a s k   5 Subtask\ 5 Subtask 5 20 20 20 ≤ 1 0 3 \leq 10^3 103
S u b t a s k   6 Subtask\ 6 Subtask 6 25 25 25无特殊限制
Subtask 1

暴力枚举排列,构造树,判断同构。期望得分 15 15 15 分。

Subtask 2

a n s 1 = 1 , a n s 2 = n , ∀ i ∈ ( 2 , n ] , a n s i = i − 1 ans_1 = 1, ans_2 = n, \forall i \in (2, n], ans_i = i − 1 ans1=1,ans2=n,i(2,n],ansi=i1。期望得分 5 5 5 分。

Subtask 3

设每一条链的长度为 a 1... m a_{1...m} a1...m。不妨 ∀ i ∈ [ 1 , m ) , a i ≤ a i + 1 \forall i \in [1, m), a_i ≤ a_{i+1} i[1,m),aiai+1
a n s 1 = 1 , a n s 2 = n , ∀ i ∈ ( 2 , a i + 1 ] , a n s i = i − 1 ans_1 = 1, ans_2 = n, \forall i \in (2, a_i + 1], ans_i = i − 1 ans1=1,ans2=n,i(2,ai+1],ansi=i1
依次考虑 j = 2 ∼ m j = 2 \sim m j=2m。对于一个 j j j,假设 x = ∑ k = 2 j a k x = \sum\limits_{k=2}^{j} a_k x=k=2jak

依次往 a n s ans ans 中加入 n − x ∼ n − x + a j − 1 n − x \sim n − x + a_j − 1 nxnx+aj1。期望得分 20 20 20 分。

Subtask 4 ∼ 5

先枚举根。令 f u f_u fu 表示 u u u 这棵子树可以对应到的字典序最大的答案, w u w_u wu 表示 u u u 对应的 p p p 值,
s i z e u size_u sizeu 表示 u u u 子树的大小。
结论
每一棵子树在 p p p 中的下标一定对应一段区间。
证明:
如果不是,假设 v v v 不在 u u u 的子树中但是插在了 u u u 的子树的中间。
此时一定有 w u > w v w_u > w_v wu>wv,否则 v v v 就是 u u u 子树中的点了。
但是出现在 v v v 之后第一个本应在 u u u 子树中的点一定不能连到 u u u 的子树中,矛盾。

我们考虑计算出每一个 f u f_u fu。假设所有 v ∈ s o n u v \in son_u vsonu f v f_v fv 都已经计算好了。
首先 f u , 1 = 1 f_{u,1} = 1 fu,1=1,否则一定不是一棵树。
把所有 v ∈ s o n u v \in son_u vsonu f v f_v fv ∣ f v ∣ |f_v| fv 第一关键字从小到大, f v f_v fv 字典序第二关键字从大到小排序。
然后把所有 f v f_v fv 依次插入 f u f_u fu。容易发现这样可以使得 f u f_u fu 字典序最大。
时间复杂度 O ( n 3 ) \mathcal{O}(n^3) O(n3) O ( n 3 l o g n ) \mathcal{O}(n^3 log n) O(n3logn)。期望得分 35 ∼ 55 35 \sim 55 3555 分。

Subtask 5 ∼ 6

上面直接枚举根暴力太慢了,我们可以考虑换根。
g u g_u gu u u u 的外子树的字典序最大的答案。
那么从 g u g_u gu 转移到某个儿子只需要按之前的排序方法找到 g u g_u gu v ∈ s o n u v \in son_u vsonu f v f_v fv 中位置即可。
时间复杂度 O ( n 2 ) \mathcal{O}(n^2) O(n2) O ( n 2 l o g n ) \mathcal{O}(n^2 log n) O(n2logn)。期望得分 55 ∼ 100 55 \sim 100 55100 分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值