1 solutions
-
0
题解
对于字典树中任意一个节点,其最多有26个子节点(26个字母);
设i为当前层数,maxNode[i]为i层最多节点数,对每层分开讨论;
k层取得最多节点时,必定k-1层每个节点都有26个子节点且k-1层满节点,此时maxNode[k]=maxNode[k-1]*26,因为第0层有1个节点,所以
maxNode[1]=maxNode[0]*26=26,我们可以推出maxNode[k]=
当有n个长度为m的字符时,第k层我们实际能给多少节点呢?答案是n个。当时,我们取n。当n>maxNode[k]时,我们取maxNode[k];
所以每一层ans+=
贴出一个错误代码
for (int i = 0; i <= m; i++) { ans1 = (min((int)pow(26, i), n) + ans1) % mod; }为什么不这样写呢?因为,i可以取到1e5,肯定会有溢出的情况,所以肯定不能全写pow(26,i);
让我们再看看这个式子,并思考!!!!!!!,我们可以试出<1e5<,
(当然也可以写个代码找),也就是说k>=5时,maxNode[k]永远大于n,我们永远只取n,这里贴出核心代码
for (int i = 0; i <= m; i++) { if (i <= 5) ans1 = (min((int)pow(26, i), n) + ans1) % mod; else ans1 = (ans1 + n) % mod; }
- 1
Information
- ID
- 7099
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 2
- Tags
- (None)
- # Submissions
- 4
- Accepted
- 2
- Uploaded By