manacher模板题,用stringTLE,用char数组AC,求助orz
  • 板块题目总版
  • 楼主Crystal_mhz
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/13 10:55
  • 上次更新2024/7/13 13:08:11
查看原帖
manacher模板题,用stringTLE,用char数组AC,求助orz
1054357
Crystal_mhz楼主2024/7/13 10:55
#include<bits/stdc++.h>
using namespace std;
string n,nn;
int s[22000010],ma=0;
int main()
{
	cin>>nn;
	int len=nn.length();
	nn=" "+nn;
	n=" @";
	for(int i=1;i<=len;i++)
	{
		n=n+nn[i];
		n=n+"@";
	}
	len=n.length();
	int l=1,r=1;
	s[1]=1;
	for(int i=2;i<len;i++)
	{
		if(i<=r)
		s[i]=min(s[l+r-i],r-i+1);
		while(n[i+s[i]]==n[i-s[i]])
		s[i]++;
		if(i+s[i]-1>r)
		{
			l=i-s[i]+1;
			r=i+s[i]-1;
		}
		if(s[i]>ma)
		ma=s[i];
	}
	cout<<ma-1;
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
char n[22000010],nn[22000010];
int s[22000010],ma=0;
int main()
{
	cin>>nn;
	n[0]=' ';
	n[1]='@';
	int len=strlen(nn+1);
	int k=1;
	for(int i=0;i<=len;i++)
	{
		n[++k]=nn[i];
		n[++k]='@';
	}
	int l=1,r=1;
	s[1]=1;
	len=k;
	for(int i=2;i<len;i++)
	{
		if(i<=r)
		s[i]=min(s[l+r-i],r-i+1);
		while(n[i+s[i]]==n[i-s[i]])
		s[i]++;
		if(i+s[i]-1>r)
		{
			l=i-s[i]+1;
			r=i+s[i]-1;
		}
		if(s[i]>ma)
		ma=s[i];
	}
	cout<<ma-1;
	return 0;
}

P3805 manacher模板题, 用string就TLE,改成char数组就AC ,核心算法没变,求助orz

2024/7/13 10:55
加载中...