洛谷 - P3649 - 回文串 - 回文自动机
https://www.luogu.org/problem/P3649
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Node {
    int len, ch[26], fail;
    int cnt;
    Node(int len = 0) : len(len), fail(0) {
        memset(ch, 0, sizeof(ch));
        //下面是维护额外信息
        cnt=0;
    }
};
const int MAXN = 300000;
//PalindromicAutomaton
struct PAM {
    Node nd[MAXN + 5];
    int len, top, last;     // len为字符串长度mtop为节点个数,last为最后插入字符所对应的节点
    char s[MAXN + 5];
    int getfail(int x) {        //沿着fail指针找到第一个回文后缀
        while(s[len - nd[x].len - 1] != s[len])
            x = nd[x].fail;
        return x;
    }
    PAM() : len(0), top(0), last(0) {
        nd[top] = Node(0);
        nd[top].fail = 1;
        nd[++top] = Node(-1);
        nd[top].fail = 0;
        s[0] = '$';
    }
    void extend(char c) {
        s[++len] = c;
        int now = getfail(last);     //找到插入的位置
        if(!nd[now].ch[c - 'a']) {     //若没有这个节点,则新建并求出它的fail指针
            nd[++top] = Node(nd[now].len + 2);
            nd[top].fail = nd[getfail(nd[now].fail)].ch[c - 'a'];
            nd[now].ch[c - 'a'] = top;
        }
        last = nd[now].ch[c - 'a'];
        //下面是维护额外信息
        ++nd[last].cnt;
    }
} pam;
char s[MAXN + 5];
int main() {
#ifdef Yinku
    freopen("Yinku.in", "r", stdin);
#endif // Yinku
    scanf("%s", s);
    for(int i = 0; s[i] != '\0'; ++i)
        pam.extend(s[i]);
    ll ans = 0;
    for(int i = pam.top; i >= 2; --i) {
        pam.nd[pam.nd[i].fail].cnt += pam.nd[i].cnt;
        ans = max(ans, 1ll * pam.nd[i].cnt * pam.nd[i].len);
    }
    printf("%lld\n", ans);
    return 0;
}
												
											洛谷 - P3649 - 回文串 - 回文自动机的更多相关文章
- 洛谷oj U3936(分成回文串) 邀请码:a0c9
		
题目链接:传送门 题目大意:略 题目思路:DP 先预处理,分别以每个字母为中心处理能形成的回文串,再以两个字母为中心处理能形成的回文串. 然后 dp[i] 表示1~i 能形成的数目最少的回文串. 转移 ...
 - 2018.06.29 洛谷P2890 [USACO07OPEN]便宜的回文(简单dp)
		
P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome 时空限制 1000ms / 128MB 题目描述 Keeping track of all the cows c ...
 - 【洛谷4287】[SHOI2011] 双倍回文(Manacher算法经典题)
		
点此看题面 大致题意: 求一个字符串中有多少个长度为偶数的回文串,它的一半也是回文串. \(Manacher\)算法 这应该是\(Manacher\)算法一道比较好的入门题,强烈建议在做这题之前先去学 ...
 - 洛谷P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome
		
题目链接: 点我 题目分析: 玄学\(dp\) 设\(val[s[i] - 'a' + 1]\)表示字母\(s[i]\)的花费 首先发现对于一个已经回文了的串\(s[i, j]\),在\(s[i - ...
 - BZOJ.3676.[APIO2014]回文串(回文树)
		
BZOJ 洛谷 很久之前写(抄)过一个Hash+Manacher的做法,当时十分懵逼=-= 然而是道回文树模板题. 回文树教程可以看这里(真的挺妙的). 顺便再放上MilkyWay的笔记~ //351 ...
 - bzoj 3676: [Apio2014]回文串 回文自动机
		
3676: [Apio2014]回文串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 844 Solved: 331[Submit][Status] ...
 - BZOJ3676[Apio2014]回文串——回文自动机
		
题目描述 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. 输入 输入只有一行,为一个只包含小写字 ...
 - 2018.12.15 bzoj3676: [Apio2014]回文串(后缀自动机)
		
传送门 对原串建立一个后缀自动机,然后用反串在上面匹配. 如果当前匹配的区间[l,r][l,r][l,r]包裹了当前状态的endposendposendpos中的最大值,那么[l,maxpos][l, ...
 - HYSBZ  2565 最长双回文串 (回文树)
		
2565: 最长双回文串 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1377 Solved: 714 [Submit][Status][Dis ...
 - HYSBZ 3676   回文串 (回文树)
		
3676: [Apio2014]回文串 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1680 Solved: 707 [Submit][Stat ...
 
随机推荐
- heroinfo_set.all 函数
			
如果是 一对多 关系 即使用 heroinfo_set.all 此时关联字段类型通用,即上边的字段通用,但是需要添加many=True的参数heroinfo_set = serializers.Pr ...
 - 【SaltStack官方版】—— states教程, part 3 - 定义,包括,延伸
			
STATES TUTORIAL, PART 3 - TEMPLATING, INCLUDES, EXTENDS 本教程建立在第1部分和第2部分涵盖的主题上.建议您从此开始.这章教程我们将讨论更多 s ...
 - spark(2.1.0) 操作hbase(1.0.2)
			
一.写操作 1.spark中引入外部jar包 1)创建/usr/software/spark_jars目录,把hbase里的lib里的以下七个jar放入/usr/software/spark_jars ...
 - html的a链接的href怎样才另起一个页面,一个页面调到另一个html页面
			
在后面加上target ="_blank",就可以,正如: <ul class="nav navbar-nav navbar-right" style=& ...
 - css-外面元素的高度,由里面的元素进行撑开(由内部的高度决定)
			
1.删除你的高度的固定值 2.将父元素的====>display:inline-block; 或者设置浮动====>float:left;
 - zrender的线性渐变
			
线性渐变 官方文档是这样写的 实际运用是酱紫的 在把颜色放背景中 小白一枚,路过大神,多多指教.欢迎留下宝贵意见
 - ng-template、ng-content、ng-container
			
https://www.jianshu.com/p/0f5332f2bbf8 ng-template.ng-content.ng-container三者应该是自定义组件需要经常用到的指令.今天咱们就来 ...
 - docker-compose简介
			
一.Docker-Compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排. Docker-Compose将所管理的容器分为三 ...
 - c++复习——类(2)
			
1.this指针 this指针是一个指向对象的指针.  this指针是一个隐含于成员函数中的对象指针.  this指针是一个指向正在调用成员函数的对象的指针.  类的静态成员函数没有this指针 ...
 - es关闭不使用的index、真正删除文档
			
因为只要索引处于open状态,就会占用内存+磁盘: 如果将索引close,只会占用磁盘 Curl -XPOST ‘hadoop01:9200/index/_close’ ------ 在es中删除文档 ...