月赛T2超时,求优化
  • 板块学术版
  • 楼主lujunxuan123
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/8/20 19:13
  • 上次更新2023/11/3 02:24:25
查看原帖
月赛T2超时,求优化
716372
lujunxuan123楼主2023/8/20 19:13
#include<bits/stdc++.h>
using namespace std;
int T,n,ma,i,t,w,mid,bao,ans,f[100010],j;
char s[100010];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>T;
	while(T--){
		cin>>n>>s+1;ma=0;
		for(i=1;i<=n;i++)f[i]=f[i-1]+(s[i]=='T');
		for(i=1;i<=n;i++){
			if(s[i]=='B'||s[i]=='T'&&s[i-1]=='T')continue;
			t=i;w=n;
			while(t<=w){
				mid=(t+w)/2;
				if(f[mid]-f[i-1]==mid-i+1)t=mid+1,bao=mid;
				else w=mid-1;
			}
			mid=bao;ans=mid-i+1;
			for(j=i-1;j>=4;j-=2){
				if(s[j]=='B'&&s[j-1]=='T'&&s[j-2]=='T'&&s[j-3]=='B'){
					ans++;
					break;
				}
				if(s[j]!='B'||s[j-1]!='T')break;
			}
			for(j=mid+1;j<=n-3;j+=2){
				if(s[j]=='B'&&s[j+1]=='T'&&s[j+2]=='T'&&s[j+3]=='B'){
					ans++;
					break;
				}
				if(s[j]!='B'||s[j+1]!='T')break;
			}
			ma=max(ma,ans);
		}
		cout<<ma<<'\n';
	}
}
2023/8/20 19:13
加载中...