n²过百万怎么回事,玄关
查看原帖
n²过百万怎么回事,玄关
596783
sms123楼主2024/8/14 12:52

rt,下面这段代码很轻松就 AC 了,但萌新感觉复杂度是 O(n2)O(n^2) 的,是 €€ ⁣£€€\!£ 数据太水还是我复杂度算错了?

#include<bits/stdc++.h>
#define N 2000005
using namespace std;
int n,jump[N],dp[N],t[150];char c[N];
long long ans;
int main(){
	cin>>n>>(c+1);
	for(int i=1;i<=n;i++){
		if(t[c[i]]){
			int j=i-1;
			while(c[j]!=c[i]&&j>0)j=jump[j]-1;
			if(j>0)jump[i]=j,dp[i]=dp[j-1]+1;
			ans+=dp[i];
		}else t[c[i]]=1;
	}cout<<ans;return 0;
}

大概思路就是跳过可消除的子串跳过来统计答案。

2024/8/14 12:52
加载中...