題解
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
難度:紫(未完)