M - Palindromic String

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 128000/128000KB (Java/Others)

Submit Status

秋实大哥喜欢探索新鲜事物,最近他发明了一种新型回文串,叫K重回文串!今天他想用它来考考小朋友们。

秋实大哥给出了与K重回文串有关的信息

任何字符串都属于0重回文串,包括空字符串。
一个长度为N的字符串S,S是K(k≥1)重回文串,当且仅当S是回文串,且其长度为⌊N2⌋的前缀和长度为⌊N2⌋的后缀是K−1重回文串。
如果一个字符串是K重回文串,则称该字符串有一个回文值为K。一个字符串可以有多个回文值,比如S=abaaba,其回文值可为0,1,2,3。
字符串的最大回文值是该字符串所有回文值的最大值。
若字符串S的最大回文值≥1,则S一定是回文串。
一个字符串S,如果其正着读和反着读是一样的,则称S是回文串,比如aabaa,aba,a。但abc,abab,aacba就不是回文串。
一个长度为N的字符串S,其有N+1个前缀和N+1个后缀(不一定非空),比如abcde,有6个前缀,分别是空字符串,a,ab,abc,abcd,abcde;有6个后缀,分别是空字符串,e,de,cde,bcde,abcde。
秋实大哥给你一个字符串S,他想问问你,S所有前缀的最大回文值之和是多少?

Input

第一行输入一个字符串S(0<|S|≤2⋅106),S包含 大写英文字母(A-Z),小写英文字母(a-z),数字(0-9)

Output

输出一个整数,表示S所有前缀的最大回文值之和。

Sample input and output

Sample Input Sample Output
z
1
a2Az
1
abacaba
6
CCeCeCCCee
4
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
231

Hint

下面对样例3进行解释:
abacaba有8个前缀,分别是 空字符串,a,ab,aba,abac,abaca,abacab,abacaba;
设P(i) 表示第 i 个前缀的最大回文值,且空字符串是第0个前缀;
则P(0)=0,P(1)=1,P(2)=0,P(3)=2,P(4)=0,P(5)=0,P(6)=0,P(7)=3;那么∑7i=0P(i)=6。

解题报告:

这是一道阅读题,读懂了就很简单,我们的目的就是快速判断某一前缀是否是回文串,使用hash进行判断即可

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn = 2e6 + 50 , p1 = 1403641 , p2 = 2807303 , mod1 = 1e9 + 7,mod2 = 1e9 + 9;
char s[maxn];
int  len,ans[maxn];
ll hash1[maxn],hash3[maxn],px[maxn];void init_hash()
{hash1[0] = 0 ,hash3[0] = 0;for(int i = 1 ; i <= len ; ++ i)hash1[i] = (hash1[i-1]*p1 + s[i]) % mod1;for(int i = len ; i >=1 ; -- i)hash3[len-i+1] = (hash3[len-i]*p1 + s[i]) % mod1;
}int gethashvalue(int l,int r,int id)
{ll ans;if (id == 1){ans = (hash1[r] - hash1[l-1]*px[r-l+1])%mod1;if (ans < 0)ans += mod1;return ans;}else if(id == 3){ans = (hash3[r] - hash3[l-1]*px[r-l+1])%mod1;if (ans < 0)ans += mod1;return ans;}
}int main(int argc,char *argv[])
{scanf("%s",s+1);len = strlen(s+1);init_hash();ans[1] = 1;px[0] = 1;for(int i = 1 ; i <= len ; ++ i)px[i] = (px[i-1]*p1)%mod1;for(int i = 2 ; i <= len ; ++ i){if ( gethashvalue(1,i,1) == gethashvalue(len-i+1,len,3))ans[i] = ans[i/2]+1;elseans[i] = 0;}long long out = 0;for(int i = 1 ; i <= len ; ++ i)out += ans[i];printf("%lld\n",out);return 0;
}

转载于:https://www.cnblogs.com/Xiper/p/4499185.html

UESTC_Palindromic String 2015 UESTC Training for Search Algorithm StringProblem M相关推荐

  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. 2016 UESTC Training for Search Algorithm String I - 谭爷剪花布条 KMP

    I - 谭爷剪花布条 Time Limit: 3000/100MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit ...

  3. UESTC_摩天轮 2015 UESTC Training for Dynamic ProgrammingProblem K

    K - 摩天轮 Time Limit: 10000/4000MS (Java/Others)     Memory Limit: 262143/262143KB (Java/Others) Submi ...

  4. UESTC_酱神寻宝 2015 UESTC Training for Dynamic ProgrammingProblem O

    O - 酱神寻宝 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  5. UESTC_秋实大哥下棋 2015 UESTC Training for Data StructuresProblem I

    I - 秋实大哥下棋 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  6. UESTC_邱老师的脑残粉 2015 UESTC Training for Graph TheoryProblem D

    D - 邱老师的脑残粉 Time Limit: 12000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  7. UESTC_秋实大哥与快餐店 2015 UESTC Training for Data StructuresProblem C

    C - 秋实大哥与快餐店 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  8. UESTC_秋实大哥与花 2015 UESTC Training for Data StructuresProblem B

    B - 秋实大哥与花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  9. 2015 UESTC Winter Training #10【Northeastern Europe 2009】

    2015 UESTC Winter Training #10 Northeastern Europe 2009 最近集训都不在状态啊,嘛,上午一直在练车,比赛时也是刚吃过午饭,状态不好也难免,下次比赛 ...

  10. 2015 UESTC Winter Training #6【Regionals 2010 North America - Rocky Mountain】

    2015 UESTC Winter Training #6 Regionals 2010 >> North America - Rocky Mountain A - Parenthesis ...

最新文章

  1. C语言与OpenCL的编程示例比较
  2. Excel 常见公式
  3. solr模糊查询_《Solr实战》之一
  4. 【模式识别】K均值聚类算法应用实验报告及MATLAB仿真
  5. ANSI X9.19 MAC算法介绍
  6. 用JAVA制作小游戏——推箱子(二)
  7. linux挂载CentOS yum,centos7本地挂载yum仓库
  8. Python 入门 Day5
  9. win7右键菜单不见解决办法
  10. 【转】正则表达式括号的作用
  11. font-family 字体及各大主流网站对比
  12. html设置发光字体制作,用CSS3制作炫酷的自定义发光文字
  13. dd命令磁盘对拷及备份
  14. 公众号对接淘宝联盟_公众访问新联盟支持的作品
  15. Excel公式向导,详细演艺多条件求平均值的操作
  16. Latex公式与Word公式相互转换(使用MathType)
  17. Java--身份证号校验
  18. Centos7在公网使用PCDN拨号
  19. 基于python实现梯度下降法(GD)在线性回归中的应用(Boston房价预测数据集)
  20. 简单的一个在线聊天室

热门文章

  1. C# Cad二次开发新手入门系列教程(三)添加图形到数据库
  2. flac怎么转为mp3?
  3. 2022煤矿瓦斯检查考试题模拟考试题库及答案
  4. linux 用户登录闪退,Linux云主机输入Root密码登录系统后闪退怎么办?
  5. dpdk/vpp中的memif使用方法
  6. 计算机如何获取界面,电脑启动时怎么进入GHOST界面 系统如何获取打开Ghost方法技巧...
  7. 区块链软件:区块链正逐渐产业化和大众化
  8. 【笔记】计算几何模板
  9. 为什么奶茶妹妹会爱上刘强东?
  10. [Windows] 微信超级管家,自动好友回复、计数、自动同意、群发、好友导出、消息日志、无限多开...