题意:
给一个首尾相连的字符串,求有多少区间长度不大于 s ss 且至少有一个字符 e ee。
对于每一个位置,一共有 p o s + s pos+spos+s 种选取方法,对于他选取的这个区间里面只有他后面最近的那个 e ee 位置之后的 e ee 的位置可以选,所以先找的每个 e ee 的位置然后遍历即可 。
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);
}
版权声明:本文为qq_43627087原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。