原題連結
題解
首先是樸素解法,每次遍歷 \(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)\)
還是有點高