Codeforces 983 A-E

题解

A

难度:黄
算法标签:数学、进制
题目翻译:给定进制 \(b\) 和分数 \(\frac{p}{q}\),求这个分数在 \(b\) 进制下是否是有限小数。
题目分析:
首先将分数化简(不用说了)。接下来有命题:若 \(/frac{1}{q}\) 为有限小数,则 \(/frac{p}{q}\) 必然为有限小数。且逆命题、否命题成立。证明略。
不难看出,若 \(b\) 包含 \(q\) 中的所有质因数,则该分数为有限小数,否则为循环小数。但暴力分解质因数的复杂度为 \(O(\sqrt{n})\) 无法通过这道题。因此考虑优化。这里可以使用 q /= GCD(p, b) 代替。

B

难度:蓝
算法标签:动态规划
题目翻译:
在一个长度为 \(m\) 的数组 \(b\) 中定义函数 \(f\)

\[f(b) = \begin{cases} b[1] & \quad \text{if } m = 1 \\ f(b[1] \oplus b[2],b[2] \oplus b[3],\dots,b[m-1] \oplus b[m]) & \quad \text{otherwise,} \end{cases} \]

例如:

\[\begin{aligned} f(1,2,4,8)& = f(1\oplus2,2\oplus4,4\oplus8) \\ &=f(3,6,12)\\&=f(3\oplus6,6\oplus12)\\&=f(5,10)\\&=f(5\oplus10)\\&=f(15)\\&=15 \end{aligned} \]

现在,有一个长度为 \(n\) 的序列 \(a\),给了 \(q\) 组询问,请计算 \(a_l, a_{l+1}, \ldots, a_r\) 的所有连续子序列 \(\{b\}\) 中,\(f(b)\) 的最大值为多少。

题目分析:\(O(n^2)\) 预处理 \(f\) 每一层的值,然后递推,用 \(d[i][j]\) 表示以 \(i\) 为起点长度为 \(j\) 的最大值,然后 \(O(1)\) 查询。直接做就做完了。

C

难度:紫(未完)

posted @ 2024-11-09 14:44  cakn  阅读(45)  评论(0编辑  收藏  举报