求助
查看原帖
求助
490484
include13_fAKe楼主2024/7/12 21:17
// LUOGU_RID: 165591817
#include<bits/stdc++.h>
using namespace std;

const int maxn=1e6+15;
char str[maxn];
int lst[maxn*3][2];
int dp[maxn];
void solve(){
	scanf("%s",str+1);
	int len=strlen(str+1);
	for(int i=1;i<=len;i++){
		dp[len]=0;
	} 
	str[len+1]='A';
	for(int i=maxn*2-len*2;i<=maxn*2+len;i++){
		lst[i][0]=-1;
		lst[i][1]=-1;
	}
	if(str[1]=='A')	lst[2*maxn][0]=0;
	else	lst[2*maxn][1]=0;
	int a=maxn*2;
	for(int i=1;i<=len;i++){
		if(str[i]=='A')	a+=1;
		else	a-=2;
		if(str[i]=='A'){
			if(lst[a][1]!=-1)	dp[i]=dp[lst[a][1]];
			else	dp[i]=dp[i-1]+1;
		}
		else{
			if(lst[a][0]!=-1)	dp[i]=dp[lst[a][0]];
			else	dp[i]=dp[i-1]+1;
		}
		if(str[i+1]=='A'){
			lst[a][0]=i;
		} 
		else	lst[a][1]=i;
//		cout<<dp[i]<<endl;
	}
//	cout<<endl;
	cout<<(len-dp[len])/3<<endl;
	return;
} 
int main(){
	int T;
	scanf("%d",&T);
	while(T--)	solve();
	return 0; 
}

@Rainbow_qwq

2024/7/12 21:17
加载中...