题目大意

bzoj 2803
对于两个串S1、S2,如果能够将S1的一个后缀移动到开头后变成S2,就称S1和S2循环相同。例如串ababba和串abbaab是循环相同的。
给出一个长度为n的串S,求满足下面条件的最大的L:

  1. \(L\le \frac n 2\)
  2. S的L前缀和S的L后缀是循环相同的。

\(n\le 1,000,000\)

分析

题意相当于找一段前缀=后缀(1)
删掉这两段后再找一段前缀=后缀(2)
长度和就是答案了
其中(1)部分随便搞\(O(n)\) \(hsh\)扫过去就好了
为了复习写了发\(kmp\)
(2)部分有一个神性质,可以\(dp\)
记\(f[i]\)表示不跨越\(mid\)的情况下,以\(i\)开头的前缀和以\(n-i+1\)结束的后缀的最大匹配长度
重要性质:\[f[i-1]<=f[i]+2\]
证明:
令\(j=n-i+1\)
设f[i]对应的最长匹配为\([i,A]\) 与 \([B,j]\) (3)
\(f[i-1]\le f[i]+2\)
就是如图

原式相当于\(i-1\)的匹配位置不超过原来匹配位置的下一位
反证一波:
设匹配到第A+K(K>=2)位
则\([i-1~,~A+K]=[B-K~,~j+1]\)
取这两段的第二位到倒数第二位
有\([i,A+K-1]=[B-(K-1)~,~j]\)
(3)矛盾

注意

此题神数据卡hash
于是我开了双hash继续Wa
3hash就过了
所以感觉双hsh姿势应该是
一个自然溢出,一个取模,可能效果更好

kmp姿势

本文kmp姿势错误,切勿学习

solution

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
using namespace std;
typedef unsigned long long ull;
typedef long long LL;
const int Q=1000000007;
const int M=1000007;
const ull W=131;
const ull X=1313;
const LL Z=13131;int n;
char s[M];
int f[M];
int nxt[M];
ull hsh1[M],pw1[M];
ull hsh2[M],pw2[M];
LL hsh3[M],pw3[M];void kmp(){nxt[1]=0;int i,k=0;for(i=1;i<=n;i++){while(k&&s[k]!=s[i]) k=nxt[k];nxt[i+1]=++k;}
}ull gethsh1(int x,int y){return hsh1[y]-hsh1[x-1]*pw1[y-x+1];
}ull gethsh2(int x,int y){return hsh2[y]-hsh2[x-1]*pw2[y-x+1];
}LL gethsh3(int x,int y){return ((hsh3[y]-hsh3[x-1]*pw3[y-x+1]%Q)%Q+Q)%Q;
}int main(){int i;scanf("%d",&n);scanf("%s",s+1);for(pw1[0]=1,i=1;i<=n;i++) pw1[i]=pw1[i-1]*W;for(pw2[0]=1,i=1;i<=n;i++) pw2[i]=pw2[i-1]*X;for(pw3[0]=1,i=1;i<=n;i++) pw3[i]=pw3[i-1]*Z%Q;for(i=1;i<=n;i++) hsh1[i]=hsh1[i-1]*W+s[i];for(i=1;i<=n;i++) hsh2[i]=hsh2[i-1]*X+s[i];for(i=1;i<=n;i++) hsh3[i]=(hsh3[i-1]*Z+s[i])%Q;f[n/2+1]=0;for(i=n/2;i;i--){f[i]=f[i+1]+2;while(f[i]&&i+f[i]-1>n/2) f[i]--;while(f[i]&&(gethsh1(i,i+f[i]-1)!=gethsh1(n-i+1-f[i]+1,n-i+1)||gethsh2(i,i+f[i]-1)!=gethsh2(n-i+1-f[i]+1,n-i+1))||gethsh3(i,i+f[i]-1)!=gethsh3(n-i+1-f[i]+1,n-i+1)) f[i]--;}kmp();int ans=0;for(i=nxt[n+1];i;i=nxt[i])if(i<=n/2) ans=max(ans,(i-1)+f[i]);printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/acha/p/6398980.html

bzoj 2803 [POI2012]prefixuffix hsh+性质相关推荐

  1. bzoj 2803: [Poi2012]Prefixuffix(双Hash)

    2803: [Poi2012]Prefixuffix Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 413  Solved: 167 [Submit] ...

  2. BZOJ 2788[Poi2012]Festival

    题面: 2788: [Poi2012]Festival Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 418  Solved: 190 [Submit ...

  3. BZOJ 2793: [Poi2012]Vouchers(调和级数)

    Time Limit: 20 Sec  Memory Limit: 64 MB Submit: 582  Solved: 250 [Submit][Status][Discuss] Descripti ...

  4. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

  5. Loj一本通刷题记录

    夏令营回来后就不知道怎么回事,状态一直不好== 为了让自己不要太颓废,开个坑在noip前把一本通的好题都刷一遍. 如果想要noip拿省一的话,就要开始好好努力了.加油! 为了节省时间,一些比较简单的东 ...

  6. BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)...

    题面戳这 化下题面给的式子: \(z_u+z_v=p_u+p_v-b_{u,v}\) 发现\(p_u+p_v-b_{u,v}\)是确定的,所以只要确定了一个点\(i\)的权值\(x_i\),和它在同一 ...

  7. BZOJ 3864: Hero meet devil (从dp性质实现dp套dp)

    题意:求长度为m的,字符集大小为4的,字符串,中,与字符串S(|S|<=15)的最长公共子序列长度=i的字符串数量.i∈0→∣S∣i \ \in 0 \to |S|i ∈0→∣S∣ 发现这个状态 ...

  8. BZOJ 2434: [Noi2011]阿狸的打字机 ACAM+fail树

    title BZOJ 2434 LUOGU 2414 Description 打字机上只有 \(28\) 个按键,分别印有 \(26\) 个小写英文字母和 B.P 两个字母,是这样工作的: 输入小写字 ...

  9. BZOJ 2143 飞飞侠(线段树优化建边 / 并查集优化最短路)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2143 是 hydro 的 BZOJ ...

最新文章

  1. rhel 5 检测软件awstats,cacti,ntop搭建
  2. 为应用程序池 ''DefaultAppPool'' 提供服务的进程意外终止。进程 ID 是 ''xxx''问题的解决方法...
  3. 仅完成部分的readprocessmemory或write_盘点2019年新能源车企销量目标完成率:广汽新能源超额完成/吉利、北汽紧随其后...
  4. Qt使用导出类报错:error C2491: “ZMapWidget::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义
  5. php根据设备判断访问,PHP判断设备访问来源
  6. devc++不兼容_Mac压缩文件Win不支持?BetterZip帮你解决!
  7. Tricks(二十一)—— 随机数
  8. 基于 Generator 和 Iterator 的惰性列表
  9. 好用的eclipse快捷键
  10. [leetcode]Unique Paths
  11. objdump选项解释
  12. 反编译OD工具OllyDBG 2.0.1下载
  13. PMP 考点 第六章 项目进度管理
  14. kotlin-stdlib 与 kotlin-stdlib-jdk7
  15. 如何修改iTunes的iPhone备份路径?
  16. 2020年浙江大学金融考研经验分享
  17. 百度地图3D地球接入
  18. 3d游戏建模学习心得,自学maya,zbrush,substance一个月的感想
  19. MTCNN 人脸检测论文解读,及tensorflow代码实现
  20. 【BLENDER】-渲染 背景设置

热门文章

  1. 微信视频通话视频录制_录制视频通话和数据保护
  2. 安装Android studio时遇到的问题
  3. 百度地图API 显示区域边界及地名定位
  4. 大话Stable-Diffusion-Webui-客制化主题(一)
  5. 全球及中国航空钛锻造行业发展前景趋势分析及投资风险研究报告2021年版
  6. 尼采:不能听命于自己者,就要受命于他人。
  7. 工业智能摄像机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. 【已解决】Python错误“SyntaxWarning: “is“ with a literal. Did you mean “==“?”
  9. 大连市数字经济发展专项资金申报开始,最高补贴500万 | 产业区块链发展周报...
  10. 《一分钟经理人》读后感总结