CCF 2023 CSP-S T2 原题 自己的瞎想感觉可以想下去但是...
查看原帖
CCF 2023 CSP-S T2 原题 自己的瞎想感觉可以想下去但是...
580278
LXD1344238220楼主2023/10/22 20:40
#include<bits/stdc++.h>
using namespace std;
int n;
struct d
{
	int l,r;
}a[200005];
int b[200005];
string s;
long long ans;
int main()
{
	//freopen("game.in","r",stdin);
	//freopen("game.out","w",stdout);
	cin>>n;
	s[0]='0';
	ans=0;
	for(int i=1;i<=n;i++)
	cin>>s[i];
	for(int i=1;i<=n;i++)
	{
		a[i].l=i-1;
		a[i].r=i+1;
	}
	for(int i=1;i<=n;i++)
	{
		//cout<<i<<endl;
		int k=0;
		while(s[i]==s[a[i].r]&&a[i].r<=n&&a[a[i].r].l>=1)
		{
			a[a[i].r].l=a[i].l;
			a[a[i].l].r=a[a[i].r].r;
			a[a[a[i].r].r].l=a[i].l;
			a[i].r=a[a[i].r].r;
			/*for(int j=1;j<=n;j++)
			{
				cout<<j<<" "<<a[j].l<<" "<<a[j].r<<endl;
			}*/
			ans++;
			i=a[i].l;
			k=1;	
		}
		if(k==1)
		i=a[i].r-1;
	}
	for(int i=1;i<=n;i++)
	{
		b[a[i].l]++;
	}
	for(int i=0;i<=200004;i++)
	{
		int w=b[i]/2-1;
		if(w>0)
		ans=ans+(w+1)*w/2;
	}
	cout<<ans;
	return 0;
}

2023/10/22 20:40
加载中...