Day5 阶段性检测 1

A. CF1770C Koxia and Number Theory

  • 如果存在两个相同的 a a a,不合法。
  • 如果存在至少一个数 k k k,使得对任意 x ∈ [ 0 , k − 1 ] x \in [0,k-1] x[0,k1],存在至少两个 a a a 满足 a i ≡ x ( m o d k ) a_i \equiv x \pmod k aix(modk),不合法。

第一条很显然。

第二条,从模 k k k 意义上来说,对一个数加 x x x x   m o d   k x \bmod k xmodk 是等价的,不妨令 x ∈ [ 0 , k − 1 ] x \in [0,k-1] x[0,k1]。如果满足性质二,那么两个满足模 k k k k − x k-x kx a a a gcd ⁡ \gcd gcd 一定为 k k k 的整数倍。代码

B. CF1801D The Way Home

最终的路径简单概括就是:赚钱、走、赚钱、走…

因此考虑将最终的路径化为若干段路径,划分的路径都在起点处赚钱。

做法:先 floyd 出任意两点之间的花费。定义 u → v u \to v uv 的次数花费为 ⌈ s ( u , v ) − g u a u ⌉ \lceil \dfrac {s(u,v) - g_u} {a_u} \rceil aus(u,v)gu,其中 s ( u , v ) s(u,v) s(u,v) u , v u,v u,v 间最短路的花费, a u a_u au 为在 u u u 处一次演出钱, g u g_u gu 为走到 u u u 剩下的钱。按照次数花费建新图,跑最短路。这里把 dij 认为是贪心的话就很好理解了。

代码

C. CF1771D Hossam and (sub-)palindromic tree

先考虑树退化成一条链的情况,区间 dp:记 f l , r f_{l,r} fl,r 表示 [ l , r ] [l,r] [l,r] 匹配的最长回文串长度,有:

f l , r = max ⁡ { f l + 1 , r f l , r − 1 f l + 1 , r − 1 + [ a l = a r ] \large f_{l,r}=\max\begin{cases} f_{l+1,r} \\ f_{l,r-1}\\ f_{l+1,r-1} +[a_l=a_r] \end{cases} fl,r=max fl+1,rfl,r1fl+1,r1+[al=ar]

对于树的情况,其实就是若干条链,确定了两端的点 u , v u,v u,v 就是链的情况。具体转移需要知道 x x x y y y 方向移一个点的 x ′ x' x,可以通过 dfs 预处理出 x x x y y y 为根的树时的父亲结点,该父亲点即为 x ′ x' x

有:
f u , v = max ⁡ { f u ′ , r f u , v ′ f u ′ , v ′ + [ a u = a v ] \large f_{u,v}=\max\begin{cases} f_{u',r} \\ f_{u,v'}\\ f_{u',v'} +[a_{u}=a_{v}] \end{cases} fu,v=max fu,rfu,vfu,v+[au=av]

代码

D. CF1763F Edge Queries

最水 3000*。

建圆方树,方点设为 bcc 边数,圆点设为 0,即求路径点权和。

没写。

你可能感兴趣的:(游记,c++)