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 ...
随机推荐
- 已解决: mybatis报错 org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'xxx' in 'class java.lang.String'
最近在练习MyBatis时 进行姓名的模糊查询时候出现 org.apache.ibatis.exceptions.PersistenceException: ### Error querying da ...
- Arguments Optional-freecodecamp算法题目
Arguments Optional 1.要求 创建一个计算两个参数之和的 function.如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果. 如 ...
- 1043: [HAOI2008]下落的圆盘
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1725 Solved: 743[Submit][Status][Discuss] Descripti ...
- 爬虫学习(四)——post请求爬取
百度翻译爬取数据 import urllib.requestimport urllib.parsepost_url = "https://fanyi.baidu.com/sug"h ...
- Linux运维企业架构项目实战系列
Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...
- 将xml转为array 输出xml字符
//将xml转为array private function fromXml($xml){ // 禁止引用外部xml实体 libxml_disable_entity_loader(true); ret ...
- 【CSS】简略说明css的权重之分
/*权重 :id > class > 标签 (小环境) 权重:内联 > 内部 > 外部 (大环境) 小环境处于内部环境中 */ <style> #p1{ /* id ...
- 数据结构-模式匹配串算法(KMP)
#include<cstdio> #include<iostream> #include<string> #include<cstring> #incl ...
- [Python]有关pygame库中的flip和update的区别
pygame.display.flip()和pygame.display.update()的用法上的区别: 资料一. 资料二. (资料最后更新时间:2019年1月9日)
- 解析XML格式数据
学习解析XML格式的数据前,搭建一个简单的web服务器,在这个服务器上提供xml文本用于练习. 一.搭建Apache服务器 在Apache官网下载编译好的服务器程序,安装.对于Windows来说127 ...