CTT 2018
Day 1
A \(\color{red}\bigstar\)
计算几何,还不会,有空学一下。
B \(\color{green}\bigstar\)
简单题,只需要看 \(\frac{\prod b_i}{\prod d_i^2}\) 即可。
那么对于一个确定的 \(b_i\),对这个东西的贡献是对称的。
也就是 \((b_i,x)\) 和 \((b_i,b_i/x)\) 这两个方案互为倒数。
也就是只要算出等于一的方案,加上后除以二就行。
算出相等的,相当于每一个质因数都要相同,跑个暴力 dp 就行。
C \(\color{green}\bigstar\)
点分治方案数,考虑给点标号,标的号小的在点分树上深度小。
那么两个标号相同的中间必须有一个标号小的点。
那么一个子树填完后,给外面还有贡献的有一些点,两个子树合并的时候,相当于当前点去作为一个前缀的父亲(点分树上),然后对于剩下的点,两个子树合并需要满足标号不交,那么就是一个简单的组合数。
\(s\) 是 \(f\) 的后缀和。
也可以理解为是两个点分树合并,本质就是两条链进行合并,第二维记录的是 \(u\) 所在链的长度。
Day 2
A \(\color{Gold}\bigstar\)
首先考虑没有修改,只能离线下来长剖做,然后发现有修改很难做了。
强制离线,每 \(\sqrt{Q}\) 个操作分个块,然后过一个块重构,然后块内修改暴力即可,复杂度 \(O(n\sqrt{Q})\)。
回顾了一下长剖写法,这种需要算前缀和的长剖的常见套路是记录后缀和。
代码写完就过了,很爽。
B \(\color{Gold}\bigstar\)
类似与同余最短路,因为 \(1\times 1\) 的方格是 \(4S-C\) 最小的,而且一定有的放,因此考虑对于每个 \(4S-C\) 计算凑出这个的最小的 \(S\)。
因为放置的矩形的宽 \(a\le \sqrt{S}\),因此枚举 \(a\),然后接下来先放置一个 \(a\times a\) 的,然后后面可以接 \(1\times a\),直接完全背包一下就行。
C \(\color{green}\bigstar\)
欧拉数板子题,懒了。
Day 3
A
skip。
B \(\color{red}\bigstar\)
后缀平衡树,有时间学。
C \(\color{blue}\bigstar\)
\(nk\) 不大,可以暴力 dp,关键是如何计算区间的答案。
扫描线一下,注意到区间所需时间就是每个点到根路径的并的大小,因此对于一个点,如果它子树里有一个在区间中的点,那么对答案就有贡献,把贡献放在最右边的那个点上。
考虑加入一个点树上那些点会属于这个,相当于就是它到根的路径,因此 LCT Access 一下,维护一下颜色就做完了。
复杂度 \(O(nk\log n)\),遥遥领先,也不知道别人写的啥。
Day 4
A \(\color{Gold}\bigstar\)
构造好题。
用 SPFA 的序列去模拟 dij,注意到一个点如果最后一次出现一定是它已经成为了最短路,把这些位置标出来。
而在两个最优点中间这一段东西,就是前面一个最优点以及它前面那些普通点更新的东西,注意到最优点一定是由前面的最优点来更新的,所以可以直接把最优点拉成一条链。
中间这一段东西,我也直接强制让前面的那个最优点来更新就好了,只需要记录一个当前最短路,减一就行。
还需要保证前面的普通点当前无法更新其他点,那么说明其连出去的点权需要 \(\ge 2^{60}-dis_x\),记录一下就行,在后面连的时候注意一下。
B \(\color{blue}\bigstar\)
题解也没有,代码也没有,以下内容口胡。
首先发现,第一问的答案是最大匹配。
考虑下界,最大匹配肯定是一种合法方案,因为只要把孤立点挂上去就行。
上界的话,每个连通块至少需要包含左右的点,因此不可能有更大的方案。
\(k\) 的限制的话,连通块个数最多说明边数最少,一个不满足连通块数最多的方案可以断边调整成最多的。
可以发现这样每个连通块都是一个菊花图,不过没什么用。
第二问已知总边数,直接每个点流量 \([1,k]\) 的上下界网络流就行了。
还没学,先咕。
C
skip。