GYM102439 2018-2019 9th BSUIR Open Programming Championship. Semifinal 题解

· · 个人记录

A. Four minutes until BSUIR Open

用单调栈维护对速度有限制的摄像头,最后枚举每对相邻的摄像头,解二次方程得到所用时间。时间复杂度 O(n)

B. Varvara and matrix

由于每行每列最多只有一个 0,所以限制只有两种形式:

转化为 2-SAT。建第一种边时可以用 bitset 优化。时间复杂度 O(nm(1+\frac{\min\{n,m\}}w))

C. Cockroach Racing

$$ dp[l][r][i][j]=\sum_{l\le k\le r}dp[l][k][i+1][0]\cdot dp[k][r][i][j+1] $$ 总和的转移类似。时间复杂度 $O(10\cdot n^3m)$。 #### D. Light show 加向量的时候维护最大的基即可。时间复杂度 $O(nq(1+\frac{\min\{n,q\}}{w}))$。 #### E. Small business 简单分类讨论即可。 #### F. Prime or number 显然充要条件是 $n-n\bmod 2$ 的二进制表示有恰好一个 $1$。 #### G. Sequence exploration 当 $n\ge 35$ 时,末 $1000$ 位的循环节为 $4$。时间复杂度:$O(35\cdot m)$。 #### H. Nonfibonacci numbers 发现限制其实是十进制表示中不包含 $1$, $2$, $3$, $5$, $8$。数位 DP,时间复杂度 $O(\log n)$。 #### I. Equal Mod Segments 记 $C=\max\{a_i\}$。对于一个固定的左端点,$a_l\bmod a_{l+1}\bmod\cdots\bmod a_r$ 相等的极长区间个数只有 $O(\log C)$,倒过来同理。对每种不同的数分别扫描线即可。时间复杂度 $O(n\log C\log n)$。 #### J. Boedium 对每个人算出他命中 $0,1,\ldots,20$ 发子弹的概率。枚举 $1$ 号选手命中的子弹数,简单 DP 即可。时间复杂度 $O(20^2\cdot n)$。 #### K. Innovations 每条边分别算贡献。一条边最多被修改 $\log\log w$ 次,用并查集维护还未变成 $1$ 的边即可。时间复杂度 $O(n\log \log w+m\alpha(n))$。 #### L. The only winner 假设要算每对数的和都 $\le m$ 的方案数。令 $l=m/2$,则 $l+1,\ldots,2n$ 的每个数都匹配了 $1,\ldots,l$ 中的某个数,剩下的任意匹配,因此方案数为 $\frac{(m-2n)^{2n-l}(2l-2n)!}{(l-n)!2^{l-n}}$。而要求有恰好一对数的和为 $m+1$,其余都 $\le m$,容易算出方案数为 $\frac{(2n-m+l)(m-2n)^{2n-l-1}(2l-2n)!}{(l-n)!2^{l-n}}$。对 $m$ 从 $2n$ 到 $4n-2$ 求和即可。时间复杂度 $O(n\log n)$。