ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UOJ#103. 【APIO2014】Palindromes PAM模板题

2019-04-01 14:41:21  阅读:297  来源: 互联网

标签:ch puts APIO2014 Palindromes long printf 103 PAM define


原文链接www.cnblogs.com/zhouzhendong/p/UOJ103.html

前言

  我终于会PAM啦

  感谢CLY大佬手把手教我PAM

题解

  建个 PAM。

  统计一下每一个节点的 Right 集合大小,设 size[x] 为节点 x 的 right 集合大小。

  求出 max(len[x] * size[x]) ,做完了。

代码

 #include <bits/stdc++.h>
#define clr(x) memset(x,0,sizeof (x))
#define For(i,a,b) for (int i=a;i<=b;i++)
#define Fod(i,b,a) for (int i=b;i>=a;i--)
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define fi first
#define se second
#define _SEED_ ('C'+'L'+'Y'+'A'+'K'+'I'+'O'+'I')
#define outval(x) printf(#x" = %d\n",x)
#define outvec(x) printf("vec "#x" = ");for (auto _v : x)printf("%d ",_v);puts("")
#define outtag(x) puts("----------"#x"----------")
#define outarr(a,L,R) printf(#a"[%d...%d] = ",L,R);\
						For(_v2,L,R)printf("%d ",a[_v2]);puts("");
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef vector <int> vi;
LL read(){
	LL x=0,f=0;
	char ch=getchar();
	while (!isdigit(ch))
    	f|=ch=='-',ch=getchar();
	while (isdigit(ch))
		x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return f?-x:x;
}
const int N=300005;
int n;
char s[N];
namespace PAM{
	int len[N],Fail[N],Next[N][26];
	int size[N];
	int cnt;
	void init(){
		cnt=2;
		len[1]=-1,Fail[1]=1;
		len[2]=0,Fail[2]=1;
		clr(Next),clr(size);
	}
	void build(char *s,int n){
		init();
		s[0]='*';
		int x=1;
		For(i,1,n){
			while (s[i-len[x]-1]!=s[i])
				x=Fail[x];
			int c=s[i]-'a';
			if (Next[x][c])
				x=Next[x][c];
			else {
				int y=Next[x][c]=++cnt;
				len[y]=len[x]+2;
				if (len[y]==1)
					Fail[y]=2;
				else {
					x=Fail[x];
					while (s[i-len[x]-1]!=s[i])
						x=Fail[x];
					Fail[y]=Next[x][c];
				}
				x=y;
			}
			size[x]++;
		}
		Fod(i,cnt,1)
			size[Fail[i]]+=size[i];
	}
	LL solve(){
		LL ans=0;
		For(i,2,cnt)
			ans=max(ans,(LL)len[i]*size[i]);
		return ans;
	}
}
int main(){
	scanf("%s",s+1);
	n=strlen(s+1);
	PAM::build(s,n);
	cout<<PAM::solve()<<endl;
    return 0;
}

  

标签:ch,puts,APIO2014,Palindromes,long,printf,103,PAM,define
来源: https://www.cnblogs.com/zhouzhendong/p/UOJ103.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有