Manacher--雾窗寒对遥天暮,暮天遥对寒窗雾
POJ 3974: Palindrome
题意:
最长回文子串的长度...
分析:
Manacher板子题...
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
using namespace std;
//眉眼如初,岁月如故 const int maxn=+; int cas,len,p[maxn]; char s[maxn],str[maxn]; inline void prework(void){
int i=;
for(i=;s[i];i++)
str[i*+]='#',str[(i+)*]=s[i];
len=i*+;str[]='$';str[len]=str[len+]='#';
} inline void manacher(void){
int id,mx=,ans=;
for(int i=;i<=len;i++){
p[i]=i<mx?min(mx-i,p[id*-i]):;
while(str[i+p[i]]==str[i-p[i]])
p[i]++;
if(p[i]+i>mx)
mx=p[i]+i,id=i;
if(ans<p[i]-)
ans=p[i]-;
}
printf("%d\n",ans);
} signed main(void){cas=;
while(scanf("%s",s)&&s[]!='E'){
printf("Case %d: ",++cas);
prework();manacher();
}
return ;
}//Cap ou pas cap. Pas cap.
HDU 3948: The Number of Palindromes
题意:
求原串中本质不同的子串个数...
分析:
写完发现大家都用的后缀数组...然而我不会...只能用Manacher+Hash水...
本质不同的回文串个数级别是O(n)的...所以我们可以暴力扫描回文串...我们枚举回文串的中心位置,然后判断最长回文串,如果没有出现过则判断其子串,否则直接break...
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
#define int long long
#define II int
using namespace std;
//眉眼如初,岁月如故 const II maxn=+,Mod=; int l,cas,len,p[maxn],po[maxn],Hash[maxn]; char s[maxn],str[maxn]; struct M{
int hd[Mod+],nxt[maxn],w[][maxn],cnt; inline void clear(void){
memset(hd,-,sizeof(hd));cnt=;
} inline void insert(int x,int l,int r){
w[][cnt]=l,w[][cnt]=r,nxt[cnt]=hd[x],hd[x]=cnt++;
} inline bool find(int x,int l,int r){//cout<<"find"<<endl;cout<<l<<" "<<r<<endl;
for(int i=hd[x];i!=-;i=nxt[i])
if(r-l+==w[][i]-w[][i]+){
int j;
for(j=;j<=r-l+;j++)
if(str[w[][i]+j-]!=str[w[][i]+j-])
break;
if(j==r-l+)//{
return true;//cout<<"finish find"<<endl;}
}//cout<<"finish find"<<endl;
return false;
} }mp; inline void prework(void){
int i=;l=strlen(s);
for(i=;s[i];i++)
str[i*+]='#',str[(i+)*]=s[i];
len=i*+;str[]='$';str[len]=str[len+]='#';
for(int i=;i<=len;i++){
if(str[i]>='a'&&str[i]<='z')
Hash[i]=(Hash[i-]*%Mod+str[i]-'a'+)%Mod;
else
Hash[i]=(Hash[i-]*%Mod+)%Mod;
}
} inline void manacher(void){
int id,mx=;
for(int i=;i<=len;i++){
p[i]=i<mx?min(mx-i,p[(id<<)-i]):;
while(str[p[i]+i]==str[i-p[i]])
p[i]++;
if(i+p[i]>mx)
mx=i+p[i],id=i;
}
} inline void find(void){
int ans=;
for(int i=;i<=len;i++){//cout<<i<<" "<<p[i]<<endl;
if(!mp.find((Hash[i+p[i]-]-Hash[i-]*po[p[i]]%Mod+Mod)%Mod,i,i+p[i]-)){
ans++,mp.insert((Hash[i+p[i]-]-Hash[i-]*po[p[i]]%Mod+Mod)%Mod,i,i+p[i]-);
int lala=p[i]-;
while(lala>=&&!mp.find((Hash[i+lala-]-Hash[i-]*po[lala]%Mod+Mod)%Mod,i,i+lala-))
ans++,mp.insert((Hash[i+lala-]-Hash[i-]*po[lala]%Mod+Mod)%Mod,i,i+lala-),lala-=;
}
}
printf("%lld\n",ans-);
} signed main(void){
scanf("%lld",&cas);po[]=;Hash[]=;
for(int i=;i<=;i++)
po[i]=po[i-]*%Mod;
for(int i=;i<=cas;i++){mp.clear();
scanf("%s",s);printf("Case #%lld: ",i);
prework();manacher();find();
}
return ;
}//Cap ou pas cap. Pas cap.
By NeighThorn
Manacher--雾窗寒对遥天暮,暮天遥对寒窗雾的更多相关文章
- Unity中雾效的开启
原文:https://blog.csdn.net/Rhett_Yuan/article/details/54425236 1.对于雾效的开启在新版的Unity中通过界面菜单Windows->Li ...
- paper 100:何恺明经典去雾算法
一:由简至美的最佳论文(作者:何恺明 视觉计算组) [视觉机器人:个人感觉学习他的经典算法固然很重要,但是他的解决问题的思路也是非常值得我们学习的] 那是2009年4月24日的早上,我收到了一封不同 ...
- NeHe OpenGL教程 第十六课:雾
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 【Unity Shaders】Unity里的雾效模拟
写在前面 熟悉Unity的都知道,Unity可以进行基本的雾效模拟.所谓雾效,就是在远离我们视角的方向上,物体看起来像被蒙上了某种颜色(通常是灰色).这种技术的实现实际上非常简单,就是根据物体距离摄像 ...
- OpenCV导向滤波(引导滤波)实现(Guided Filter)代码,以及使用颜色先验算法去雾
论文下载地址:http://research.microsoft.com/en-us/um/people/jiansun/papers/GuidedFilter_ECCV10.pdf 本文主要介绍导向 ...
- 雾霾天出行,如何精确避开“雷区”?2016 SODA数据侠十强
(2016年参加了上海 SODA 竞赛,进入前十,最终获得上海市的两个奖项.) ▍跟踪雾霾,仅靠零星的监测点数据怎么行? 如果雾霾短期内没有办法彻底根治,我们可以做什么,把环境污染物对人的影响尽可能降 ...
- 电子模块 001 --- 遥杆 JoyStick
电子模块 001 - 遥杆 JoyStick - Ongoing - 2016年8月31日 星期三 遥杆 JoyStick 模块 今天介绍:JoyStick 电子模块. 模块名称: 双轴按键摇杆 PS ...
- 批处理命令——for
[1]for命令简介 先把for循环与for命令类比一下,这样学习理解快. for 循环语句,一般格式如下: for (表达式1;表达式2;表达式3) { 循环体; } 1. 表达式1 一般为初始状态 ...
- windows批处理学习(for和字符串)---03
[1]for命令简介 先把for循环与for命令类比一下,这样学习理解快. for 循环语句,一般格式如下: 1 for (表达式1;表达式2;表达式3) 2 { 3 循环体; 4 } 1. 表达式1 ...
随机推荐
- org.hibernate.hql.internal.ast.QuerysyntaxException:user is not mapped [from User where user_code=? and user_password=?]
初学者,一个很低级的错误吧! 找不到映射,最后发现没把类的Hibernate映射文件 添加到Hibernate核心配置文件中去,所以报了这个异常! 在核心文件中添加映射 <mapping r ...
- html +css 登陆框中加用户图片,并设置登陆名不盖住图标
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java中json前后端日期传递处理
这里推荐2种方式 依赖包 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifa ...
- Python_装饰器、迭代器、生成器
一.装饰器 装饰器的存在是为了实现开放封闭原则: 封闭: 已实现的功能代码块不应该被修改: 开放: 对现有功能的扩展开放. 理解装饰器的三要素: 函数的作用域 高阶函数 闭包 1. 闭包 闭包定义:如 ...
- h5中的video与audio
·首先带大家熟悉一下video标签的属性方法,根据属性方法做一个小demo, HTML5支持的视频格式: Ogg 带有Theora视频编码+Ogg文件 支持的浏览器:F.O MEPG4 带有H.26 ...
- SourceTree 跳过登录注册,直接使用
SourceTree下载安装后,运行程序会要求你登录或注册账号才能使用, 然而登录或注册基本都收不到服务器的响应 (在国外嘛,安全起见),于是卡在此处无法使用了. 下面就来介绍一下跳过这尴尬环节的方法 ...
- 26.VUE学习之--提交表单不刷新页面,事件修饰符之使用$event与prevent修复符操作表单
提交表单不刷新页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Lake Counting(dfs)
Description Due to recent rains, water has pooled in various places in Farmer John's field, which is ...
- bootstrap-图片样式记录
//三种形状<img src=”img/pic.png” alt=”图片” class=”img-rounded” /><img src=”img/pic.png” alt=”图片” ...
- 关于前后端日期处理 开发注意事项 jquery.tmpl()函数的使用
1当后端将日期传到前段的时候 我们通常会需要将日期转为制定格式 除了平常我们使用的前段插件将日期转好 spring @datetimeFormat 注解 这些形式外 我们还可以在实体里通过get方法进 ...