Day 1
全是水题。
Day 2
C
傻逼题,赛时想偏了。
首先只需要判断继承的类是否有一对满足有公共祖先并且有派生关系的。
发现直接维护祖先集合,然后按照加入顺序依次并起来就可以满足所有查询要求。
D
也是傻逼题,但实现可能有点麻烦。
显然任意的 (k) 度子图都是可以一层层剥出来的,我们考虑权值怎么维护。
发现如果对于每个点记录连向的点度数小/等/大的边数就可以在从内向外扩展时很方便地维护了。
Day 3
D
考虑修改一个字符时增加多少和减少多少回文子串。
手模一下可以发现增加的就是跨过边界还能延伸的长度,减少的是一个区间加等差数列。由于最后是整体查询所以不需要线段树。
写的时候需要注意一些边界条件。
Day 3.5(?)
因为上场出题人太阴间所以送了一场
C
简单容斥,钦定 (i) 个位置被划分即可。
D
简单题,把所有串上 Trie 先,然后考虑往下走的时候如何同时维护后缀。
发现只需要记录每种后缀对应到 Trie 上的位置就可以 (log n) 查询了。
好像数据比较强,双模才过掉的。
Day 4
题目都比较简单,但是 trick 很有趣。
每行每列建点看连通性的 trick 见过没想起来是大问题;三个点组成的三条线段中只有相邻点的斜率才可能最大。
Day 5
出题人又脚造数据差评/fn
C
其实是很套路的构造,不过考场上被自己骗了胡了随机化上去。
发现 (42^3) 是大于 (n) 的,那么考虑搞一个三层的东西:(43) 个点分一个块,(43) 个块再分一个块,块内的边连成相同的就满足条件了。
D
出题人出 ACM 出多了导致暴力接近满分?
Day 6
A 喜提多测不清空爆零两行泪
C 喜提秒出正解写错爆零
B
神秘构造题。
按照最高位,四块分三层,有点类似上场 C。
D
很容易想到一个平方暴力就是枚举第一条边,然后去更大的一边枚举第二条边。
显然上述算法的第二步耗费了太长时间,我们考虑如何更快查询。
发现可以 DFS 时顺便做掉,动态维护祖先集合即可。
Day 7
赛前涨 rp 场。
D
可以变成对于每个串求其为某个串的前缀的概率。
考虑一个各个字符出现次数集合为 (T={t_i}) 的串作为 (S_x) 的前缀的概率显然为 (p_{T,x}=dfrac{prod {s_i}^{underline{t_i}}}{(sum s_i)^{underline{sum t_i}}})。
那么至少一个串容斥一下就是 (P(T)=sumlimits_{S}(-1)^{|S|-1}prodlimits_{iin S}p_{T,i}),总的答案就是 (sumlimits_{T}dfrac{(sum t_i)!}{prod(t_i)!}P(T))。
然而直接算复杂度爆炸,显然不行,考虑再变化一下。
注意到上面的式子的乘积部分都可以分成与单独 (t_i) 有关的和与 (sum t_i) 有关的部分。
然后我们枚举 (S) 的时候做一下背包,加入一个 (t_i=y) 的贡献是可以预处理的,这样复杂度就降到了 (O(2^nm^2))。