对模式串 abc,我们考虑每个字符 b 的位置对答案的贡献。对于每个 b,它左侧可以删除字符得到 a,右侧可以删除字符得到 c,两侧的方案数相乘即为该 b 能产生的 abc 总数。累加即得答案。
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx,avx2,fma")
#include <bits/stdc++.h>
给定一个由小写字母组成的字符串 S,我们固定一个模式串 abc(即字符 'a','b','c' 依次相连)。
对于一个字符串 T,定义其「模式出现次数」为 T 中等于 abc 的连续子串出现的次数。例如,T 为 abcc 时次数为 1,abcabc 时为 2,acb 时为 0。
现在考虑从 S 中删除零个或多个字符(但不能删除全部字符),保持剩余字符的相对顺序,所能得到的所有新字符串。对每一个这样的新字符串,求其模式出现次数。请计算所有这些次数的总和,并将结果对 109+7 取余后输出。
字符串 S 的长度 n 满足 1≤n≤105。
In following contests:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册