2020牛客多校

打星为 upsolve

Round 1

好多论文题。。自闭

rank 99 (3/10)

*A

后缀数组,卡常

F

签到,扩两倍下标取模比较下

H

预处理费用分段函数,讨论

J

OEIS 牛逼

Round 2

再也不做构造系列

rank 85 (5/11)

*A

对于每个字符串枚举前缀 $s[1]$ … $s[i]$,设有 $cnt[i]$ 个后缀和他相同,但这样会重复计算,如字符串 $aba$ 和后缀 $aba$,同一字符串的后缀被计了两次数

考虑去重,从前往后 $cnt[next[i]]-=cnt[i]$,然后计算答案即可。

B

三点定圆,考虑枚举 $(0,0)$ 外的另外 $2$ 点,算出圆心去重统计答案,注意精度。

C

赵哥狂日$20$发

题解做法:所有叶子按 dfs 序 sort, $l_{1} - l_{s/2+1}$, $l_{2} - l_{s/2+2}$ $…$ $l_{s/2} - l_{n}$

D

签到

*E

待补 FWT

F

两维分别单调队列,这里求 $gcd$ 可以记忆化去掉一个 $log$

*G

依出题人的说法,这种 $m$ 是 4万的数据应该往 $bitset$ 上靠。。。

$n*m$ 在 1e9 左右的题都可以考虑一下 $bitset$,复杂度会除个 $64$

做法类似于 $shift-and$,首先对于每个 $a[i]$ 处理出他在 $b$ 数组中能匹配的位置 $s[i]$,这个用个 bitset 存下。

注意到本质不同的 $s$ 最多 $m$ 种,对于每个 $b[j]$ 求下 $s$ 即可

剩下的做法和 $shift-and$ 一致了,$f[i][j]$ 表示结尾为 $i$ 的子区间是否能匹配上 $b[1$~$j]$,记作 $cur$,转移:cur = (cur << 1 & s[i]) | 1

*H

赛中差一点调出,爆了 int 。。。

考虑三种情况:

  1. $a < b < x$,a 和 b 取 x 的两个前驱最优
  2. $a < x < b$,a 和 b 分别取 x 的前驱和后继最优
  3. $x < a < b$,首先 a 和 b 一定是连续的,其次考虑能组成三角形时的条件:$x+a>b$ 即 $x>b-a$,因此维护有序序列,权值为相邻两项的差,求 $>x$ 权值的 $min$ 即可

1 和 2 开个 $set$ 搞一搞就行

3: 请选择你喜欢的数据结构.jpg

*I

网络流平面图转对偶图

J

J

*K

待补,几何 给队友了。。。

Round 3

rank 62 (8/12)

好,dreamoon牛逼

A

贪心,有🐟就抓,倒序累计可以用鱼饵抓鱼的时间点

B

平衡树

模拟 手玩观察规律,护偏移量就行

C

几何,zyy牛逼

D

构造,zyy牛逼

先构造一个正方形,每次向右上挪点 ans+=2,变成一条链后拆两端的点,每次 ans+=2

E

dp,zzq牛逼

先sort,观察发现偶数 >=4 联通快内最优解为 2*(a[r]-a[l]),之后dp

F

数论,zzq牛逼

a b 不互质直接构造

分解 b,若 b 为 p^k 则无解

否则分解 b 为 p^k * b/p^k,exgcd解两个解

G

数据结构

并查集维护联通情况,vector 维护边集,启发式合并

list 可以做到 O(1) 合并

H

数据结构,每次找 [l,r] 中 p 最小的位置分治,笛卡尔树做到线性

*I

待补

*J

待补

*K

待补

L

签到

Round 4

rank 84 (4/10)

题不错,就是人太菜

*A

考虑 k 固定,二分答案记作 dis,每次贪心找叶子的 dis 级祖先并割掉这颗子树

一个性质若答案为 dis,则关键点数至少为 n/dis 级别的(考虑一条链)

那么总关键点数就是一个调和级数,对于每个 dis 用线段树模拟割子树的过程总复杂度两个 log

B

简单数论

*C

牛逼串串题 题面好难读

把后缀全丢到 Trie 上总点数为 10N 级别的

然后问题变成了求 Trie 上串本质不同字串个数,广义SAM

*D

待补

*E

待补

F

签到不会系列

*G

待补,搬砖题??

H

数论,原题了

除了 1 和 > n/2 的质数外都能匹上

一种构造:

倒序考虑所有质数 p,处理他的所有未匹配的倍数,假设有 num 个

若 num 为偶数,则两两匹配,若为奇数,则留下 2*p

最后将所有留下的所有 2*pi 两两匹配

I

魔 幻 调 参

每次找一个未归类的点,假设他所有的话都是真的,扩一波点

然后以多数人原则来判断组内是否有错加入的点,及当 >cnt 的人认为他是一组时就认为是真的

然后做 bfs 扩点,同样也用同样的原则辨别真假

最后 cnt 调成 当前组内点数/2 过了。。。

*J

据说是分块,补一下

作者

Bakapiano

发布于

2020-07-13

更新于

2020-07-24

许可协议

评论