30分求助!!
查看原帖
30分求助!!
608131
louhuaijin楼主2023/8/21 08:50
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=500010;
int n,s[maxn],coun[maxn],max1;
int findmax(int now,int next,int pre,int cnt)
{
	if(now==0) return 0;
	int sum=0,sig=0;
	if((coun[next]==2)&&next<cnt)
	{
		for(int i=now+1;i<next;i++)
		{
			if(coun[i]!=1) 
			{
				sig=1;
				break;
			}
		}
		if(sig==0) sum++;
	}
	if(coun[pre]==2&&pre>1)
	{
		for(int i=now-1;i>pre;i--)
		{
			if(coun[i]!=1) 
			{
				sig=1;
				break;
			}
		}
		if(sig==0) sum++;
	}
	return sum+coun[now];
}
signed main()
{
	int T,cnt;
	cin>>T;
	for(int k=1;k<=T;k++)
	{
		cnt=1;
		int mark=0;
		max1=-999999;
		cin>>n;
		memset(coun,0,sizeof(coun));
		memset(s,0,sizeof(s));
		coun[1]=1;
		for(int i=1;i<=n;i++)
		{
			char a;
			cin>>a;
			if(a=='T') 
			{
				s[i]=1;
				mark=1;
			}
			else s[i]=2;
		}
		if(mark==0) 
		{
			cout<<0<<endl;
			continue;
		}
		for(int i=2;i<=n;i++)
		{
			if(s[i]==s[i-1]) coun[cnt]++;
			else 
			{
				cnt++;
				coun[cnt]++;
			}
		}
		int now=0,pre=0,si,next=0;
		if(s[1]==1) si=1;
		else si=0;
		for(int i=1;i<=cnt;i++)
		{
			if(coun[i]>=2&&i%2==si) 
			{
				pre=now;
				now=next;
				next=i;
				max1=max(max1,findmax(now,next,pre,cnt));
				max1=max(max1,coun[i]);
			}
		}
		max1=max(max1,findmax(next,0,now,cnt));
		max1=
		cout<<max1<<endl;
	}
	return 0;
}

我到底漏了什么啊???

2023/8/21 08:50
加载中...