Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)

分数:回文自动机初见,2500
Problem Description

You are given a string S=s1s2..s∣S∣S=s_1s_2..s_{|S|}S=s1​s2​..s∣S∣​ containing only lowercase English letters. For each integer i∈[1,∣S∣]i∈[1,|S|]i∈[1,∣S∣], please output how many substrings slsl+1...srs_ls_{l+1}...s_rsl​sl+1​...sr​ satisfy the following conditions:
∙ r−l+1r−l+1r−l+1 equals to iii.
∙ The substring slsl+1...srs_ls_{l+1}...s_rsl​sl+1​...sr​ is a palindrome string.
∙ slsl+1...s⌊(l+r)/2⌋s_ls_{l+1}...s_{⌊(l+r)/2⌋}sl​sl+1​...s⌊(l+r)/2⌋​ is a palindrome string too.

∣S∣|S|∣S∣ denotes the length of string SSS.

A palindrome string is a sequence of characters which reads the same backward as forward, such as madammadammadam or racecarracecarracecar or abbaabbaabba.

Input
There are multiple test cases.
Each case starts with a line containing a string S(1≤∣S∣≤3×105)S(1≤|S|≤3×10^5)S(1≤∣S∣≤3×105) containing only lowercase English letters.
It is guaranteed that the sum of ∣S∣|S|∣S∣ in all test cases is no larger than 4×1064×10^64×106.

Output
For each test case, output one line containing ∣S∣|S|∣S∣ integers. Any two adjacent integers are separated by a space.

Sample Input

abababa

Sample Output

7 0 0 0 3 0 0

Source

2019 Multi-University Training Contest 2

题意:
给定一个字符串,问字符串中长度为i(1&lt;=i&lt;=n)i(1&lt;=i&lt;=n)i(1<=i<=n)的符合下列条件的子串的个数
条件:
1.这个串是个回文串
2.这个串的前半部分(如果长度为奇数则要算上最中间的字符)也是回文串

题解:
枚举本质不同的回文串:回文自动机
判断一个字符串是不是回文串:哈希
枚举每种本质不同的回文串,我们可以用哈希O(1)判断他的前半部分是不是也是回文串。
然后用PAM中的每个节点的size计数即可。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll MOD=19991227;
const int MAXN=300004;
const int D=27;
char s[MAXN];
ll bin[MAXN],Hash[2][MAXN];
int n;
void workHash(){Hash[0][0]=0;for(int i=1;i<=n;i++){Hash[0][i]=(Hash[0][i-1]*D+(s[i]-'a'+1))%MOD;}Hash[1][n+1]=0;for(int i=n;i>=1;i--){Hash[1][i]=(Hash[1][i+1]*D+(s[i]-'a'+1))%MOD;}
}
ll get(int l,int r,int x){if(!x){return (Hash[x][r]-((Hash[x][l-1]*bin[r-l+1])%MOD)+MOD)%MOD;}else{return (Hash[x][l]-((Hash[x][r+1]*bin[r-l+1])%MOD)+MOD)%MOD;}
}
bool check(int l,int r){return (get(l,(l+r)>>1,0)==get(l,(l+r)>>1,1));
}
struct PAM{int last,cnt;int len[MAXN],ch[MAXN][D],sz[MAXN],fa[MAXN],exi[MAXN];int ans[MAXN];int create(int Len,int Fa){len[cnt]=Len;fa[cnt]=Fa;return cnt++;}void CLEAR(){for(int i=0;i<cnt;i++){fa[i]=0;len[i]=0;sz[i]=0;memset(ch[i],0,sizeof(ch[i]));}cnt=0;last=0;create(0,1);create(-1,0);}int getfail(int p,int n){for(;s[n-len[p]-1]!=s[n];p=fa[p]);return p;}int add(int c,int pos){int p=getfail(last,pos);if(!ch[p][c]){ch[p][c]=create(len[p]+2,ch[getfail(fa[p],pos)][c]);exi[ch[p][c]]=check(pos-len[ch[p][c]]+1,pos);}last=ch[p][c];sz[last]++;return last;}void getans(){for(int i=cnt-1;i>=2;i--){sz[fa[i]]+=sz[i];}for(int i=cnt-1;i>=2;i--){ans[len[i]]+=sz[i]*exi[i];}for(int i=1;i<=n;i++){printf("%d",ans[i]);if(i==n)puts("");else printf(" ");}}
}pam;
int w33ha(){n=strlen(s+1);workHash();pam.CLEAR();for(int i=1;i<=n;i++)pam.ans[i]=0;for(int i=1;i<=n;i++)pam.add(s[i]-'a',i);pam.getans();return 0;
}
int main(){bin[0]=1;for(int i=1;i<=MAXN;i++)bin[i]=(bin[i-1]*D)%MOD;while(scanf("%s",s+1)!=EOF)w33ha();return 0;
}

[hdu6599]I Love Palindrome String相关推荐

  1. 2019暑期杭电多校HDU6599 I Love Palindrome String

    2019杭电多校HDU6599 I Love Palindrome String 题目链接 I Love Palindrome String Time Limit: 4000/2000 MS (Jav ...

  2. HDU-6599 I Love Palindrome String 杭电第二次多校赛(Manacher+回文自动机)

    HDU-6599 I Love Palindrome String 杭电第二次多校赛(Manacher+回文自动机) 我的博客:https://acmerszq.cn 原题链接:http://acm. ...

  3. 「HDU6599 I Love Palindrome String」 - 回文自动机

    HDU 6599 I Love Palindrome String tags:回文自动机 题意 让你求有多少个 \([l,r]\) 满足 \(s[l,r]\) 和 \(s\left[l,\frac{l ...

  4. hdu6599 I Love Palindrome String

    由样例可知,题目中求的回文串数量,其实是本质不同的回文串数量,这个可以直接用回文树来做. 考虑前半段是回文串这个限制,这个东西回文树不好做,可以再套一个马拉车,然后记录一下插入到回文树的节点中最后一个 ...

  5. HDU-6599 I Love Palindrome String(回文自动机+字符串hash)

    题目链接 题意:给定一个字符串\(|S|\le 3\times 10^5\) 对于每个 \(i\in [1,|S|]\) 求有多少子串\(s_ls_{l+1}\cdots s_r\)满足下面条件 \( ...

  6. 【题解】HDU6599 I Love Palindrome String 回文自动机

    补一下多校里碰到的字符串题. 来源:2019 HDU Multi-University Training Contest 2 - 09 给定一个字符串S,对于每个i,输出有多少个子串s[l,r]满足以 ...

  7. HDU6599 I Love Palindrome String(PAM)

    链接 题意: 首先定义好的串:自身是回文串,且前一半也是回文串.前一半的定义为[l,(l+r)/2]除号为整除 给出一个字符串,求各种长度的好的串分别有几个 思路: 利用回文树求得各种不同本质的回文串 ...

  8. leetcode题库:5.最长回文子串Longest Palindrome string

    题目描述: /** 题目地址:https://leetcode-cn.com/problems/longest-palindromic-substring/description/  * 题目:最长回 ...

  9. HDU 6599:I Love Palindrome String Manacher+回文自动机

    题意 Problem Description You are given a string S=s1s2-s|S| containing only lowercase English letters. ...

最新文章

  1. 基于Transformers入门自然语言处理!
  2. 中科院博士因论文致谢走红后,回到母校演讲再刷屏!网友:是对寒门学子最好的激励...
  3. sysbench压测Oracle
  4. CIKM 2021 | AMTL:设计孪生掩码层高效学习维度自适应的Embedding
  5. mysql 全文索引
  6. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)
  7. Python之lambda表达式
  8. 华为主导 5G 入网之争?
  9. 11-8 热点key的重建优化
  10. 在vue中实现picker样式_vue mint-ui学习笔记之picker的使用
  11. 二进制算法——模二运算
  12. SSH配置-使用Bitvise SSH Client工具在Windows下远程登陆Linux服务器
  13. 小程序转发功能的实现(页面转发和按钮转发)
  14. 【excel】QUARTILE.EXC V.S. QUARTILE.INC
  15. Aop简介 Aop术语 SpringAOP
  16. 安卓前端车牌识别技术
  17. 长短期记忆网络LSTM
  18. veins安装及运行笔记
  19. excel单元格下拉选项怎么设置_使用Excel制作搜索式下拉菜单,让你不再烦恼下拉选项多内容...
  20. C语言中的变量底部下划线表示什么,编程中的下划线是什么意思?

热门文章

  1. Hexo博客如何写文章?
  2. 机会往往留给有准备的人
  3. 用Python分析2000款避孕套,得出这些有趣的结论
  4. Abp.io(vNext)开发日志:单页面应用与外部/社交登录
  5. java计算机毕业设计皮皮狗宠物用品商城源码+系统+数据库+lw文档+mybatis+运行部署
  6. 隔年增长的题_行测资料分析:巧解隔年增长率
  7. 双一流学校、双一流学科都分别有哪些?
  8. cgo:cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
  9. 山石hcsa认证考试内容_山石防火墙HCSA认证视频教程 理论+实验细致讲解 17集非常难得的 山石防火墙视频教程...
  10. Top 10 Unanswered Questions in Geeky Movies