E. Eggfruit Cake

在这里插入图片描述
在这里插入图片描述

题意:

给一个首尾相连的字符串,求有多少区间长度不大于 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版权协议,转载请附上原文出处链接和本声明。