D - Digit vs Square Root

原题链接

题解

首先是朴素解法,每次遍历 \(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)\)

还是有点高

posted @ 2024-08-22 05:11  纯粹的  阅读(3)  评论(0编辑  收藏  举报