题意:
给一个首尾相连的字符串,求有多少区间长度不大于 s s s 且至少有一个字符 e e e。
对于每一个位置,一共有 p o s + s pos+s pos+s 种选取方法,对于他选取的这个区间里面只有他后面最近的那个 e e e 位置之后的 e e e 的位置可以选,所以先找的每个 e e e 的位置然后遍历即可 。
AC代码:
const int N = 2e5 + 10;int t;
int n, m;
char s[N];
int pos[N];
int main()
{ss(s + 1);sd(n);int len = strlen(s + 1);rep(i, 1, len)s[i + len] = s[i];rep(i, 1, 2 * len){if (s[i] == 'E')pos[++pos[0]] = i;}if (!pos[0]){puts("0");return 0;}int now = 1;ll ans = 0;rep(i, 1, len){if (pos[now] < i && now <= pos[0])now++;if (now > pos[0])break;ans += max(0, i + n - pos[now]);}pld(ans);
}