博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ3974 字符串哈希+二分
阅读量:5038 次
发布时间:2019-06-12

本文共 1697 字,大约阅读时间需要 5 分钟。

题目:

本来是想练习一下字符串哈希算法的,没想到改了好久的二分,23333。

求字符串中的最长回文字串以前我一直用的dp,当然这道题用dp会T。用哈希+二分可以达到O(NlogN)的时间复杂度。

首先进行正反两次字符串哈希。

然后分长度为奇数或偶数两种情况,对于每一个位置i,二分它向一个方向可以延伸的长度,判断使用之前预处理的字符串哈希。

当然二分要注意方法,不然可能会wa掉。

这道题要求取满足条件的最大值,应该这样二分:

int Division(){    int l=ledge,r=redge;    while(l
>1; if(judge(mid)) l=mid; else r=mid-1; } return l;}

而很多题可能求满足条件的最小值,这样二分:

int Division(){    int l=ledge,r=redge;    while(l
>1; if(judge(mid)) l=mid+1; else r=mid; } return l;}
View Code

附上ac代码:

#include 
#include
#include
#include
using namespace std;typedef unsigned long long ULL;char s1[1000010],s2[1000010];ULL f1[1000010],f2[1000010],p[1000010];int len=0;int OddDivision(int i){ int l=0,r=min(i-1,len-i); while(l
>1; if(f1[i-1]-f1[i-mid-1]*p[mid]==f2[len-i]-f2[len-i-mid]*p[mid]) l=mid; else r=mid-1; } return l;}int EveDivision(int i){ int l=0,r=min(i-1,len-i+1); while(l
>1; if(f1[i-1]-f1[i-mid-1]*p[mid]==f2[len-i+1]-f2[len-i+1-mid]*p[mid]) l=mid; else r=mid-1; } return l;}int main(){ int Case=0; while(~scanf("%s",s1+1)) { Case++; if(!strcmp(s1+1,"END")) break; len=strlen(s1+1); for(int i=len;i>=1;i--) s2[len-i+1]=s1[i];s2[len+1]='\0'; p[0]=1; for(int i=1;i<=len;i++) { f1[i]=f1[i-1]*131+s1[i]-'a'+1; f2[i]=f2[i-1]*131+s2[i]-'a'+1; p[i]=p[i-1]*131; } int ans=0; for(int i=1;i<=len;i++) { int odd=OddDivision(i); ans=max(ans,odd*2+1); int eve=EveDivision(i); ans=max(ans,eve*2); } printf("Case %d: %d\n",Case,ans); } return 0;}

 

转载于:https://www.cnblogs.com/BakaCirno/p/11307794.html

你可能感兴趣的文章
智能电视系列(4)-高通,天才与极限
查看>>
让entityframework.extend库同时支持mysql,sqlsever
查看>>
hdoj:2061
查看>>
Oarcle 入门之like关键字
查看>>
Entity Framework Code First (七)空间数据类型 Spatial Data Types
查看>>
2012年度读写Excel文件的最佳PHP类库收集
查看>>
读过的书
查看>>
ll 详解
查看>>
form表单中的label标签
查看>>
eclipse下解决明明有jar包,却找不到的问题
查看>>
Entity Framework 学习初级篇1--EF基本概况(入门)
查看>>
C Looooops
查看>>
bzoj 2226 LCMSum 欧拉函数
查看>>
JavaSript模块规范 - AMD规范与CMD规范介绍
查看>>
都市环游
查看>>
【工具】【截图工具】FScapture,支持滚动
查看>>
jQuery延迟加载(懒加载)插件 – jquery.lazyload.js
查看>>
人脸检测(1)——HOG特征
查看>>
react native 示例代码
查看>>
关于V1.6.0版本的项目总结
查看>>