沉默了
查看原帖
沉默了
184271
l55584楼主2022/2/13 21:02
#include <bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int pg[N],ph[N],nh[N],ng[N];
int main()
{
	int n;
	cin>>n;
	string s;
	cin>>s;
	s=" "+s;
	unsigned long long ans=0;
	int cntg=0,cnth=0;
	int th=0,tg=0;
	for(int i=1;i<=n;i++)
	{
		if(s[i]=='H')
		{
			pg[i]=cntg;ng[th]=cntg;cntg=0;cnth++;
			th=i;
		}
		else
		{
			ph[i]=cnth;nh[tg]=cnth;cnth=0;cntg++;
			tg=i;
		}
	}
	nh[tg]=cnth;
	ng[th]=cntg;
/*	for(int i=1;i<=n;i++)
	{
		cout<<ph[i]<<" "<<nh[i]<<" "<<pg[i]<<" "<<ng[i]<<"\n";
	}*/
	for(int i=2;i<n;i++)
	{
		if(s[i-1]=='H'&&s[i+1]=='H'&&s[i]=='G') ans+=ph[i]*nh[i];
		else if(s[i-1]=='G'&&s[i+1]=='G'&&s[i]=='H') ans+=pg[i]*ng[i];
		else if(s[i]=='H') ans+=pg[i]+ng[i]-(pg[i]+ng[i]==0?0:1);
		else ans+=ph[i]+nh[i]-(ph[i]+nh[i]==0?0:1);
	}
	ans+=ng[1]+nh[1]+ph[n]+pg[n]-2;
	cout<<ans;
	return 0;
}

一个多小时没调出来。。。沉默了

思路相同的同学帮忙看一眼吧

2022/2/13 21:02
加载中...