解题思路
长度为 m 的小写字母串,不允许出现连续 4 个相同字符。询问很多,需要先预处理再 O(1) 回答。
- 设 f1(i)、f2(i)、f3(i) 分别为长度为 i、且末尾恰好连续 1、2、3 个相同字母的方案数。
- 在末尾换一个不同字母(25 种),连续段变成 1:f1(i)=(f1(i−1)+f2(i−1)+f3(i−1))×25。
- 再重复末尾那个字母:只能接到「恰好 1 个」后面得到恰好 2 个,接到「恰好 2 个」后面得到恰好 3 个。接到 3 个后面会变成四连,不合法。
- 初值 f1(1)=26,其余为 0。长度为 i 的答案是三项之和,对 1000000007 取模。
- 预处理到 m=200000 后,每条询问直接查表。