字符串hash
因为如果一个字符串是回文串,那么正着做哈希和反着做哈希结果应该一样。于是我们先正反各做一边哈希。
如果判断出来一个字符串是回文穿那么这个字符串的前半部分和后半部分的重数一定相同,于是当前位置的字符串回文重数f[i]就等于f[i/2]+1。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<queue>
 8 #include<vector>
 9 #include<map>
10 #include<stack>
11 #include<string>
12
13 using namespace std;
14
15 const int MOD=100000009;
16 const int step=127;
17
18 long long ans;
19 int len;
20 char s[2000007];
21 int p[2000007];
22 long long hl[2000007];
23 long long hr[2000007];
24 long long mr[2000007];
25
26 int main(){
27     scanf("%s",s+1);
28     ans=0;
29     len=strlen(s+1);
30     memset(p,0,sizeof(p));
31     memset(hl,0,sizeof(hl));
32     memset(hr,0,sizeof(hr));
33     memset(mr,0,sizeof(mr));
34     for (int i=1;i<=len;i++){
35             hl[i]=(hl[i-1]*step+s[i])%MOD;
36     }
37     for (int i=len;i>=1;i--){
38             hr[i]=(hr[i+1]*step+s[i])%MOD;
39     }
40     mr[0]=1;
41     for (int i=1;i<=len;i++){
42             mr[i]=(mr[i-1]*step)%MOD;
43     }
44     for (int i=1;i<=len;i++){
45             if (hl[i]==((hr[1]-hr[i+1]*mr[i])%MOD+MOD)%MOD){47                     p[i]=p[i/2]+1;
48                     ans+=p[i];
49             }
50             else{
51                     p[i]=0;
52             }
53     }
63     printf("%lld\n",ans);
64     return 0;
65 }
66 /*
67 CCeCeCCCee
68 */

转载于:https://www.cnblogs.com/baby-mouse/p/4488676.html

uestc Palindromic String相关推荐

  1. 2015 UESTC Training for Search Algorithm String - M - Palindromic String【Manacher回文串】

    O(n)的复杂度求回文串:Manacher算法 定义一个回文值,字符串S是K重回文串,当且仅当S是回文串,且其长度为⌊N/2⌋的前缀和长度为⌊N/2⌋的后缀是K−1重回文串 现在给一个2*10^6长度 ...

  2. HDOJ 5421 Victor and String 回文串自己主动机

    假设没有操作1,就是裸的回文串自己主动机...... 能够从头部插入字符的回文串自己主动机,维护两个last点就好了..... 当整个串都是回文串的时候把两个last统一一下 Victor and S ...

  3. [LeetCode] 5. Longest Palindromic Substring

    这道题可以用动态规划,但是其实中心枚举更直接并符合逻辑,需要注意的是,以每一个字母为中心查找最大的Palindromic string的时候是有两种情况,第一种是以这个单一字母为中心(aba),第二个 ...

  4. [LeetCode]--5. Longest Palindromic Substring

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  5. Java Longest Palindromic Substring(最长回文字符串)

    假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic string.如aba,或者abba.本题是这种,给定输入一个字符串.要求输出一个子串,使得子串是最长的padro ...

  6. 转载-----Java Longest Palindromic Substring(最长回文字符串)

    转载地址:https://www.cnblogs.com/clnchanpin/p/6880322.html 假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic st ...

  7. hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)

    xiaoxin juju needs help 题意:给你一个字符串,求打乱字符后,有多少种回文串.                      (题于文末) 知识点: n个元素,其中a1,a2,··· ...

  8. Python数据结构学习笔记——队列和双端队列

    目录 一.队列的定义 二.队列 实现步骤分析 三.队列的Python实现代码 四.队列的应用 六人传土豆游戏 五.双端队列的定义 六.双端队列 实现步骤分析 七.双端队列的Python实现代码 八.双 ...

  9. 【HDU - 5744 】Keep On Movin (回文串性质,贪心思维,不是水题)

    题干: Professor Zhang has kinds of characters and the quantity of the ii-th character is aiai. Profess ...

最新文章

  1. 两两对应成排的 表格 样式
  2. cmder tips
  3. Spark1.2新特性概述
  4. postgresql9.4.4中文手册笔记-9.10 支持枚举函数
  5. 多任务 schedule python_Python3.6 Schedule 模块定时任务 (实例讲解)
  6. 实验四 linux进程控制实验报告,Linux系统进程控制操作系统实验报告4
  7. 什么是机器学习---人工智能工作笔记0012
  8. 面向对象13:单元测试方法、包装类的使用、包装类面试题
  9. 什么是软件项目管理中的WBS?
  10. 无线数字信息传送服务器,无线数字远程监控管理及网站实时推广项目方案.doc...
  11. 服务器多开安卓系统,安卓云服务器能多开吗
  12. H.264视频的RTP有效负载格式 (RFC-6184)
  13. Python爬虫:查国家安全信息库
  14. c语言间隔符号的作用,C语言教学(二)常见的符号
  15. 【山科OJ】Problem A: 社交网络的好友推荐
  16. #Paper reading#DeepInf: Social Influence Prediction with Deep Learning
  17. 昂达b450s 内存超频3200,xmp设置教程
  18. 3800 万条敏感记录在“裸奔”!微软这个默认配置把自己都“坑”了
  19. 如何根据自己的需要培养游戏开发技能?又一篇游戏编程入门指南
  20. 彩信平台,业务代码规范

热门文章

  1. C 语言取整的几种方法6,C语言有以下几种取整方法:
  2. java未发现数据源名称并且未指定默认驱动程序_转:java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序...
  3. DEKR 解构式人体关键点回归(二):标签分配(Label Assignment)
  4. 自动驾驶使用贝塞尔曲线进行静态障碍物避障测试
  5. matlab语音去除白噪声_全国首款“AI语音电梯”亮相海淀医院、北医三院
  6. iphone闪退修复工具_支持iOS13~13.3越狱工具发布(附下载地址)
  7. java数据库实例_选择数据库实例
  8. 本地连不上远程服务器mysql_mysql本地连不上远程
  9. php远程读取几行文件,PHP读取远程文件的三种方法
  10. 信息化、数字化和数字化转型的本质是什么?