2019-2020 ACM-ICPC Latin American Regional Programming Contest E - Eggfruit Cake 尺取法

#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
int read()
{
	int temp=0,ch,flag=0;
	if((ch=getchar())=='-')             //判断正负
		flag=1;
	else if(ch>='0'&&ch<='9')           //得到完整的数
		temp=ch-'0';
	while((ch=getchar())>='0'&&ch<='9')
		temp=temp*10+ch-'0';
	return flag?-temp:temp;
}
const int N=200020;
char str[N];
int num[N];
int n,m;
int solve()
{
	int cnt=0;
	cin>>str+1>>m;
	n=strlen(str+1);
	for(int i=1;i<=n;i++)
		str[i+n]=str[i];
	for(int i=1;i<=2*n;i++)
		if(str[i]=='E')
			num[++cnt]=i;
	if(!cnt)
	{
		cout<<"0"<<endl;
		return 0;
	}
	int last=1;
	ll ans=0;
	//对于当前这个 
	for(int i=1;i<=n;i++)
	{
		//当前点往前找距离他最近的 
		if(num[last]<i && last<=cnt)
			//就加 
			last++;
		//当大于了,就停止,说明枚举完了所有的e 
		if(last>cnt)
			break;
		//当然 这里要和0比较,不然会加负数 
		ans+=max(0,i+m-num[last]);
	}
	cout<<ans<<endl;
}
int main()
{
	int t=1;
	while(t--)
		solve();
	return 0;
}

猜你喜欢

转载自www.cnblogs.com/QingyuYYYYY/p/12665073.html