D - Digit vs Square Root

纯粹的發表於2024-08-22

原題連結

題解

首先是樸素解法,每次遍歷 \(n\) 然後檢視 每個數的平方根是否是其字首

時間複雜度 \(O(T\cdot n\cdot \log n)\)

這裡有兩個數,一個是 \(x\),即一個整數,一個是 \(y\),是 \(x\) 的平方根,因此我們可以換一個視角.

統計對於每一個整數 \(x\),有多少 \(y\in [x^2,(x+1)^2)\) 滿足 \(x\)\(y\) 的字首

這樣似乎簡單了一點,為什麼呢,舉個例子:

假如 \(x\)\(abcd\)

那麼 \(y\) 一定是 \(abcd*\)

其中 \(*\in[00...00,99...99]\)

所以合法的 \(y\) 一定是某一段連續的區間

我們只需要取合法的 \(y\) 所在的區間和區間 \([x^2,(x+1)^2)\) 的並集即可

這樣的時間複雜度為(預處理) \(o(\sqrt{n}+T)\)

還是有點高

相關文章