A. CF1770C Koxia and Number Theory
- 如果存在两个相同的 a a a,不合法。
- 如果存在至少一个数 k k k,使得对任意 x ∈ [ 0 , k − 1 ] x \in [0,k-1] x∈[0,k−1],存在至少两个 a a a 满足 a i ≡ x ( m o d k ) a_i \equiv x \pmod k ai≡x(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,k−1]。如果满足性质二,那么两个满足模 k k k 余 k − x k-x k−x 的 a a a 的 gcd \gcd gcd 一定为 k k k 的整数倍。代码。
B. CF1801D The Way Home
可以将最终的路径化为若干段路径,划分的路劲都在起点处赚钱,显然起点处是当前划分路径中最赚钱的。
做法:先 floyd 出任意两点之间的距离。定义每条边 u → v u \to v u→v 的次数花费为 ⌈ s ( u , v ) w u ⌉ \lceil \dfrac {s(u,v)} {w_u} \rceil ⌈wus(u,v)⌉,按照次数花费建新图,跑最短路。
没写。
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,r−1fl+1,r−1+[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,v′fu′,v′+[au′=av′]
代码
D. CF1763F Edge Queries
最水 3000*。
建圆方树,方点设为 bcc 边数,圆点设为 0,即求路径点权和。
没写。