Loading

【题解】CTT 2018 Day 1

A. 多边形上天

考虑求出质心 \(c\),因为最后触地的肯定是顶点,于是我们对于每个 \(x_i\),将问题转化为以下形式:平面一个组合 \(c,x_i\) 用杆链接,并初始以 \(v\) 的水平速度飞出。其中 \(x_i\) 围绕 \(c\) 做圆周运动,角速度为 \(\omega\) 。在其不受空气阻力的情况下,取重力加速度 \(g=9.8\ m/s^2\)\(x_i\) 第一次碰到 \(y=0\) 的时间。

考虑设初始 \(x_i\)\(c\) 的角度为 \(\theta\),那么在时刻 \(t\),角度应该是 \(\theta - t\omega\) 。考虑这一时刻的垂直方向上的速度,有 \(gt\),再将线速度正交分解一下得到 \(\cos (\theta - t\omega)r\omega\) 。于是 v-t 图像应该是 \(y=gx+\cos(\theta-x\omega)r\omega\),是一个周期函数,与一个一次函数的叠加形式。

考虑求出 \(h\leq \int_{0}^{t}(gx+\cos(\theta-x\omega)r\omega)\mathrm{dx}\) 的最小 \(t\) 。注意到每次 \(v=0\)(且接下来 \(v>0\))时,上式都会取到前缀最大值。因为 v-t 图像上的谷和峰都是周期且易求的(谷和峰可以三分,周期固定),考虑二分最后一个峰,使得这个峰与其接下来的一个谷之间有 \(v=0\) 的位置。如果此时仍然不到 \(h\),那么后续部分可以直接二分求解,否则转移到前侧二分。

考虑二分某一个 \(v=0\)(且接下来 \(v>0\))的位置,使得其是第一个满足要求的 \(v=0\)(且接下来 \(v>0\))的位置(通过峰和谷定位),再求出当前峰,与上一个谷之间 \(v=0\)(且接下来 \(v<0\))的位置(即两个位置中间有 \(v\geq 0\))。那么答案一定在这段里面,二分求解即可。

求出 \(t\) 后水平方向的位移是好求的,速度为 \(v+\sin(\theta-x\omega)r\omega\) 也只要算一下就行。

时间复杂度 \(O(n\log^2 V)\),实现了一份代码:Submission #76036 - QOJ.ac

B. esperar

注意到要求为 \(d_i\times \frac{b_i}{d_i}\leq p^k\),于是转化为求 \((a_i,b_i)\) 满足 \(a_i\times b_i\leq p^k\),而 \(\prod a\geq \prod b\) 的方案数。注意到 \(\prod a>\prod b\)\(\prod a<\prod b\) 是对称的,于是只要求出总方案,以及 \(\prod a=\prod b\) 的方案即可。

DP 一下就可以了。

C. 芒果冰加了空气

考虑划分子问题 —— 如果我们考虑将两个连通块拼在一起,那他们已确定的点分树结构应该怎么合并。我们会在两个根中选择一个根,并将剩下的那个放进当前根唯一对应子树,递归执行合并过程。

于是,到最后,假设链接边的端点为 \(u,v\),我们要做的其实就是将 \(u,v\) 各自到根的链给随意合并,剩下的部分都是确定的。方案数就只和 \(u,v\) 在点分树中的深度有关。

因此,设 \(f_{u,i}\) 表示 \(u\) 在子树内的点分树,深度为 \(j\) 的方案数。合并的时候做个前缀和,拿组合数转移一下就行了。复杂度是传统树上背包合并的复杂度,是 \(O(n^2)\) 。代码实现:Submission #76052 - QOJ.ac

posted @ 2023-02-26 21:39  Qiuly  阅读(299)  评论(0编辑  收藏  举报