日更2019.6.28

明天就要开始电子的新生活了

先学个马拉车算法压压惊
这篇博还是很好懂的
大佬写的易懂文

忘记发了。。。
昨天搞linux虚拟机搞了很久

先敲个manacher压压惊

#include<bits/stdc++.h>
using namespace std;
char s[100005],t[100005];
int l[100005];
void manacher(){
	int len=strlen(s),pos=2;
	//先初始化t数组 
	t[0]='$',t[1]='#'; 
	for(int i=0;i<len;i++){
		t[pos]=s[i];
		t[pos+1]='#';
		pos+=2;
	} 
	//开始计算
	int cenlen=0,cenpos=0,mx=0,id=0;
	for(int i=1;i<pos;i++){
		l[i]=i<mx?max(i-mx,l[2*id-i]):1;
		while(t[i+l[i]]==t[i-l[i]])++l[i];
		if(i+l[i]>mx){
			mx=i+l[i];
			id=i;
		}
		if(l[i]>cenlen){
			cenlen=l[i];
			cenpos=i;
		}
	} 
	for(int i=(cenpos-cenlen)/2;i<cenlen-1;i++){
		printf("%c",s[i]);
	}
	printf("\n");
	printf("%d",cenlen-1);
}
int main(){
	while(~scanf("%s",s)){
		manacher();
	}
	return 0;
}
发布了61 篇原创文章 · 获赞 8 · 访问量 2481

猜你喜欢

转载自blog.csdn.net/weixin_43982216/article/details/93975342