Repeats

hihoCoder 1419 后缀数组四·重复旋律4(重复次数最多的连续子串)

#include<bits/stdc++.h>
using namespace std;// sa[i]: 排名是i位的是第几个后缀
// rk[i]: 第i个后缀的排名是多少
// height[i]: sa[i]与sa[i-1]
const int N=50010;
char s[N];
int rk[N],sa[N],cnt[N],height[N];
int x[N],y[N];
int n,m;
void rsort()// x[i] 第一关键字 y[i] 第二关键字 基数排序
{for(int i=1;i<=m;i++) cnt[i]=0;for(int i=1;i<=n;i++) cnt[x[i]]++;for(int i=1;i<=m;i++) cnt[i]+=cnt[i-1];for(int i=n;i;i--) sa[cnt[x[y[i]]]--]=y[i];
}
void SA()
{n=strlen(s+1);m=300;for(int i=1;i<=n;i++) x[i]=s[i],y[i]=i;rsort();for(int k=1;k<=n;k<<=1){int p=0;for(int i=n-k+1;i<=n;i++) y[++p]=i;// 第二关键字为空字符排在最前面for(int i=1;i<=n;i++) if(sa[i]>k) y[++p]=sa[i]-k;rsort();swap(x,y);x[sa[1]]=1,p=1;for(int i=2;i<=n;i++)x[sa[i]]=(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k]?p:++p);if(p==n) break;m=p;}for(int i=1;i<=n;i++) rk[sa[i]]=i;// 求heightfor(int i=1,j=0;i<=n;i++){if(j) --j;while(s[i+j]==s[sa[rk[i]-1]+j]) j++;height[rk[i]]=j;}
}
int st[N][22],lg[N];
void init()
{for(int i=1;i<=n;i++) st[i][0]=height[i];for(int k=1;k<=lg[n];k++)for(int i=1;i+(1<<k)-1<=n;i++)st[i][k]=min(st[i][k-1],st[i+(1<<k-1)][k-1]);
}
int lcp(int a,int b)
{int l=min(rk[a],rk[b])+1;int r=max(rk[a],rk[b]);int k=lg[r-l+1];return min(st[l][k],st[r-(1<<k)+1][k]);
}
int solve()
{int ans=1;for(int l=1;l<=n;l++)for(int i=1;i+l<=n;i+=l){int r=lcp(i,i+l);ans=max(ans,r/l+1);if(i>=l-r%l) ans=max(ans,lcp(i-l+r%l,i+r%l)/l+1);}return ans;
}
int main()
{for(int i=2;i<=50000;i++) lg[i]=lg[i>>1]+1;int Tc;scanf("%d",&Tc);while(Tc--){scanf("%d",&n);for(int i=1;i<=n;i++)scanf(" %c",&s[i]);s[n+1]='\0';SA();init();printf("%d\n",solve());}return 0;
}

SPOJ687 Repeats(重复次数最多的连续子串)相关推荐

  1. #1419 : 后缀数组四·重复旋律4 (重复次数最多的连续字串)

    题目链接 思路 如何求一个串中的最大重复次数? 枚举循环节的大小,判断它是否合法. 如何快速判断循环节合法? LCP(LCP(LCP(原串, 原串−-−循环节)))是否完全匹配. 如何快速求串AAA和 ...

  2. 海量数据选取重复次数最多的n个

    最近刚换工作,面试的时候有一道题觉得很有意思,大致是通过web日志分析出网站最多的10条http请求的ip地址.页面等,我想这个可以归纳为海量数据选取重复次数最多的n个,跟网上看过的一题很类似:有10 ...

  3. 找出重复最多的字符php,javascript获取重复次数最多的字符_javascript技巧

    javascript获取重复次数最多的字符 /** 取出字符串中重复字数最多的字符 */ var words = 'sdfghjkfastgbyhnvdstyaujskgfdfhlaa'; //创建字 ...

  4. C#找出数组中重复次数最多的数值

    给定一个int数组,里面存在重复的数值,如何找到重复次数最多的数值呢? 这是在某社区上有人提出的问题,我想到的解决方法是分组. 1.先对数组中的所有元素进行分组,那么,重复的数值肯定会被放到一组中: ...

  5. JS-取出字符串中重复次数最多的字符并输出

    /**取出字符串中重复字数最多的字符 */ var words = 'sdfghjkfastgbyhnvdstyaujskgfdfhlaa'; //创建字符串 var word, //单个字符leng ...

  6. 数组重复次数最多的元素递归_使用递归计算链接列表中元素的出现次数

    数组重复次数最多的元素递归 Solution: 解: Required function: 所需功能: func_occurence ( node *temp) //recursive functio ...

  7. 数组重复次数最多的元素递归_在不使用递归的情况下计算链接列表中元素的出现次数...

    数组重复次数最多的元素递归 Solution: 解: Input: 输入: A singly linked list whose address of the first node is stored ...

  8. 前端 JavaScript 获取字符串中重复次数最多的字符

    问渠那得清如许,为有源头活水来. 想要保持自己的技术活力,最有效的手段就是通过不断地输入来提供足够的养分.我们也不必刻意追求高深的或者新鲜的知识点,通过对一个基础问题的全方位多维度解析,同样也会收获不 ...

  9. Python统计列表中重复次数最多的前N个元素

    from collections import Counter a = [1, 1, 7, 3, 6, 2, 5, 4, 4, 3, 9, 4, 4, 1] #统计列表中重复次数最多的前N个元素 N ...

最新文章

  1. delete []实现机制
  2. 怎么更进一步学python_【百尺竿头,更进一步学Python】Python进阶课程——进程,线程和协程的区别...
  3. 微型计算机的alu部件是包含在,微型计算机的ALU部件是什么?
  4. c语言switch comiti,国际经济学作业复习资料第三章.docx
  5. 精品资源:40个实用的 PSD 贴纸模板《下篇》
  6. 怎么管理Websphere应用服务器?
  7. [第1节]时间、空间复杂度,斐波那契、爬楼梯
  8. rust模组服没了_[怎么看rust服务器人数]rust标准服务器和模组服务
  9. 2021年web前端开发视频教程零基础自学HTML/VUE/JS全栈项目实战全套课程
  10. matlab绘制雷达图
  11. 国耀明医院互联网医院:儿童医保门诊不报销???你错啦!
  12. java实现deflate数据压缩和gzip数据压缩
  13. 微信小程序开发动感十足的加载动画--都在这里!
  14. python读取文本并且替换_python 读取文件并替换字段的实例
  15. 卷积神经网络图像分类的性能评估指标有哪些
  16. batch批处理小记
  17. HTTPS 的实现原理
  18. VTK交互系统 1 交互模式入门
  19. 浏览器缓存(一):强缓存 MEMORY CACHE 和 DISK CACHE
  20. 微信小程序中,图片的位置设置

热门文章

  1. linux编程两个子进程,Linux中fork同时创建多个子进程的方法
  2. sql同时向两个表插入数据_SQL入门-数据库和客户端的安装,表的创建和数据插入...
  3. tableau三轴合并_《Tableau数据可视化实战》——1.12节合并不同数据源-阿里云开发者社区...
  4. python类和函数_构建程序. Python中的类和函数
  5. 7-11 租用游艇问题 (15 分)(思路+详解+一步步分析+网格解决动态规划问题)Come boy!!!!
  6. [JavaWeb-Bootstrap]Bootstrap快速入门
  7. 蓝桥杯2015初赛-牌型种数-dfs
  8. 奔小康赚大钱 HDU - 2255( 二分图匹配KM算法详解)
  9. java中的循环结构_Java中的循环结构进阶
  10. E. Number Challenge