【总结】USACO2022FEB

Gold

T1

对于每一行,从 \(i\) 向在 \(i\) 前面的点(包括自己)连边,那么原题转化为将给定有向图划分成若干个简单环的方案数,预处理环后 DP 即可,时间复杂度 \(\mathcal{O}(n^32^n+3^n)\)。

T2

很强的期望题,我们定义状态 \(f_{i}\) 表示 \(i\) 次询问的期望最优对多少个,显然有 \(f_{i} = \sum\limits_{j=0}^{T}p_j\times \max\{j, f_{i - 1}\}\)。

\(p_i\) 表示恰好对 \(i\) 个的概率,求出 \(\{p\}\) 的前缀和 \(\{s\}\),再预处理期望 \(e_{i} = \sum\limits_{j = i} ^ T p_j\times j\),那么转移可以写成 \(f_{i} = s_{\left\lfloor f_{i - 1}\right\rfloor} \times f_{i - 1} + e_{\left\lfloor f_{i - 1}\right\rfloor + 1}\)。

不难发现转移可以划分成 \(\mathcal{O}(T)\) 个连续段,段内转移都是相同的 \(f_{i} = kf_{i - 1} + b\),每次二分端点即可,时间复杂度 \(\mathcal{O}(T^2 + T\log k)\)。

T3

对于每个点,对于每个 \(y\) 找最近的 \(x\) 连边,然后跑最小生成树即可。

Platinum

T1

先用扫描线将矩形变为一次线段加和一次线段减。

每次线段变化时,将修改的区间内,所有的颜色段都新增一个连通块,记录到答案中。

在线段减时,要将两端的颜色段合并掉,在答案中减去。这些都可以用树状数组维护。

但是发现过不去样例二,观察一下发现样例一所有线段连通,而样例二有两个连通图。

所以我们再用 set 维护一下有多少个线段构成的连通图。总时间复杂度 \(\mathcal{O}(N\log N)\)

T2

对 \(\{a\}\) 求得前缀和 \(\{s\}\),手盘样例得到如果 \(q_i | s_n\) 则答案为 \(n+1+\dfrac{s_n}{q_i} - 2\times sum\),\(sum\) 表示 \(\{s\}\) 中有多少个 \(q_i\) 的倍数,否则无解。

直接做是 \(\mathcal{O}(QN)\),实际上还能多过几个点。

考虑优化,由于我们只用考虑 \(q_i | s_n\) 的情况,所以我们先 pollard-rho 将 \(s_n\) 分解质因数,最多就 \(10^5\) 个因数,然后高维前缀和搞一下即可,时间复杂度 \(\mathcal{O}(\omega(\sum a)\sigma(\sum a))\)。

T3

非常神的 DP。

我们定义状态 \(f_{i}\) 表示前 \(i\) 位的答案。

有三种转移,分别对应划分最后 \(1\) 位,划分最后 \(2\) 位和划分最后 \(4\) 位。

但是这些情况会重复,考虑容斥掉相同的,大力讨论一下。

具体实现了一个 \(calc(x,op)\) 函数,表示对以 \(x\) 结尾的最后 \(4\) 位划分成一段,最后两位不变,倒数三四位交换的方案对 \(f_{op}\) 的贡献。如果 倒数三四位能够交换就直接返回,否则倒数第 \(6\) 位到倒数第 \(3\) 位必须能划分成一段,然后递归到 \(calc(x-2,op)\) 即可。

其余的细节省略,复杂度感觉是 \(\mathcal{O}(|s|^2)\),实际上跑起来 \(100ms\) 都不要。

上一篇:升级gcc到10.2后,解决`GLIBCXX_3.4.26‘ not found的问题


下一篇:ES6系列之【解构赋值】