字符串同构最小最大表示法模板&&manacher模板
来源:互联网 发布:淘宝牙膏属于什么类目 编辑:程序博客网 时间:2024/06/05 09:13
指的字典序最小或者最大的...对于某个字符串来说通过循环移位得到的就是同构..
int minmaxstring(char *s,bool bMin=true){ int i = 0, j = 1, k = 0, l = strlen(s), sub; while (i<l && j<l && k<l) { sub = s[(i+k)%l] - s[(j+k)%l]; if (sub == 0) k++; else { if (bMin?sub > 0:sub < 0) i += k+1; else j += k+1; if (i == j) j++; k = 0; } } return i<j?i:j;}
manacher模板
#include"cstdio"#include"iostream"#include"cstring"#include"algorithm"#define N 110005using namespace std;char a[N],b[N*2];int rad[N*2]; // rad[i]代表以i为中心的最大回文半径int main(){ while(scanf("%s",&a[1])!=-1){ //以下标1读入方便使用 int maxl,maxid,id; int i,len; for(i=1;a[i];i++){ // 插入'#' 使得所有回文串为奇数 b[i*2]=a[i]; b[i*2+1]='#'; } len=2*i;b[0]='?'; b[1]='#'; b[len]='\0'; // 防越界 头尾区别 maxid=id=0; maxl=0; for(i=1;i<len;i++){ if(maxid>i) rad[i]=min(rad[2*id-i],maxid-i); // 利用对称性优化复杂度 else rad[i]=1; while(b[i-rad[i]]==b[i+rad[i]]){ //对于当前点 搜索半径 rad[i]++; } if(rad[i]+i>maxid){ maxid=rad[i]+i; id=i; } if(rad[i]>maxl) maxl=rad[i]; } printf("%d\n",maxl-1); }}
0 0
- 字符串同构最小最大表示法模板&&manacher模板
- 理解字符串循环同构的最小/最大表示法+模板
- kmp&扩展kmp&manacher&最大最小表示法模板
- 字符串的最大最小表示法 模板
- 最小(最大)表示法模板
- poj 1635 Subway tree systems 判断树的同构 树的最大最小表示法模板
- 字符串最小表示模板
- 【模板】字符串算法-字符串最小表示法
- 【模板】字符串算法-字符串最小表示法
- ACM最小表示法 最大表示法 模板 及其使用环境 判断字符串循环重构
- 个人模板 字符串最小表示法
- 最小表示法和最大表示法模板
- 最小表示法模板
- 【字符串循环同构的最小表示法】
- 最小表示法 字符串循环同构问题
- HDU 3374 String Problem(最大最小表示法 模板题)
- hdu 3374 next表,最大最小表示法模板
- HDU 2609 How Many最大最小表示法的模板
- 第二章 2.30
- HYSBZ 2243 染色(树链剖分)
- 远程连接服务器,bash报错
- Kafka源码-1
- 轻松学习Spring IoC容器和Dependency Injection模式
- 字符串同构最小最大表示法模板&&manacher模板
- JSP四种会话跟踪技术
- animate.css-非常cool的css3第三方库特效-贴上demo
- 【新浪微博项目】03微博项目MVC管理与IOS7优化
- cpp反汇编之共同继承一个父类
- 用bat文件备份sqlserver数据库,在通过spring的schedule执行runtime完成周期备份
- 使用镜像站同步android sdk
- win8系统安装mingw遇到的问题
- C#文件文件夹拖拽功能的实现