C. 字母三连击

字母三连击

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目内容

给定一个由小写字母组成的字符串 SS,我们固定一个模式串 abc(即字符 'a','b','c' 依次相连)。

对于一个字符串 TT,定义其「模式出现次数」为 TT 中等于 abc 的连续子串出现的次数。例如,TT 为 abcc 时次数为 11,abcabc 时为 22,acb 时为 00。

现在考虑从 SS 中删除零个或多个字符(但不能删除全部字符),保持剩余字符的相对顺序,所能得到的所有新字符串。对每一个这样的新字符串,求其模式出现次数。请计算所有这些次数的总和,并将结果对 109+710^9+7 取余后输出。

字符串 SS 的长度 nn 满足 1≤n≤1051 \le n \le 10^5。

输入描述

输入仅一行,包含一个长度在 11 到 10510^5 之间的字符串 SS,仅由小写英文字母组成。

输出描述

输出一个整数,表示上述总和对 109+710^9+7 取模的结果。

样例1

输入

red

输出

1

说明

字符串 S=redS = \text{red},长度 n=3n=3。

所有删除字符得到的新字符串中,只有保留全部字符的 \text{red} 包含一次模式串 \text{red}。唯一的三元组 (i,j,k)=(1,2,3)(i,j,k)=(1,2,3) 满足 s1=’r’,s2=’e’,s3=’d’s_1=\text{'r'}, s_2=\text{'e'}, s_3=\text{'d'},贡献为 21−1×23−3=12^{1-1} \times 2^{3-3} = 1。因此总次数为 1。

样例2

输入

reed

输出

2

说明

字符串 S=reedS = \text{reed},长度 n=4n=4。

满足条件的三元组有两个:

  • (i,j,k)=(1,2,4)(i,j,k)=(1,2,4):s1=’r’,s2=’e’,s4=’d’s_1=\text{'r'}, s_2=\text{'e'}, s_4=\text{'d'},贡献 20×20=12^{0} \times 2^{0} = 1;
  • (i,j,k)=(1,3,4)(i,j,k)=(1,3,4):s1=’r’,s3=’e’,s4=’d’s_1=\text{'r'}, s_3=\text{'e'}, s_4=\text{'d'},贡献 20×20=12^{0} \times 2^{0} = 1。

相当于在 SS 中删除第 2 个字符得到 \text{red},或删除第 3 个字符得到 \text{red},每种情况在新字符串中出现 1 次模式串,总和为 2。

样例3

输入

redred

输出

18

说明

字符串 S=redredS = \text{redred},长度 n=6n=6。

满足条件的三元组及贡献如下:

  • (1,2,3)(1,2,3):21−1×26−3=20×23=82^{1-1} \times 2^{6-3} = 2^{0} \times 2^{3} = 8;
  • (1,2,6)(1,2,6):20×20=12^{0} \times 2^{0} = 1;
  • (1,5,6)(1,5,6):20×20=12^{0} \times 2^{0} = 1;
  • (4,5,6)(4,5,6):23×20=82^{3} \times 2^{0} = 8。

总和为 8+1+1+8=188 + 1 + 1 + 8 = 18,对 109+710^9+7 取模后结果仍为 18。

样例4

输入

a

输出

0

说明

字符串 S=aS = \text{a},长度 n=1n=1,不包含模式串 \text{red} 所需的任何字符,不存在满足条件的三元组,因此总次数为 0。这也是一个简单的边界情况。

真题模拟赛第四场|Ant|2023.04.04算法岗笔试

Not Attended
Status
Done
Rule
IOI
Problem
3
Start at
2023-4-14 19:00
End at
2023-4-14 20:20
Duration
1.3 hour(s)
Host
Partic.
81