求分析T2 50pts做法复杂度
  • 板块学术版
  • 楼主a16_
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/22 20:04
  • 上次更新2023/11/2 11:49:10
查看原帖
求分析T2 50pts做法复杂度
416388
a16_楼主2023/10/22 20:04
#include<bits/stdc++.h>
using namespace std;
bool b[8005][8005];
vector<int>L[8005],R[8005];
string s;int n,ans;
struct node{int l,r;};
queue<node>q;
void Push(int ll,int rr){
	if(!b[ll][rr]){
		L[ll].push_back(rr);
		R[rr].push_back(ll);
		q.push((node){ll,rr});
		b[ll][rr]=1;
	}
}
int main(){
	cin>>n>>s;
	for(int i=1;i<n;i++)if(s[i]==s[i-1])Push(i-1,i);
	while(!q.empty()){
		node f=q.front();q.pop();
		int l=f.l,r=f.r;
		ans++;
		if(l!=0&&r!=n-1)if(s[l-1]==s[r+1])Push(l-1,r+1);
		if(l!=0)for(int ll:R[l-1]) Push(ll,r);
		if(r!=n)for(int rr:L[r+1]) Push(l,rr);
	}
	cout<<ans;
	return 0;
}
2023/10/22 20:04
加载中...