hdu3261
题意:
求至少出现k次的最长字符串(可重复)
题解:
后缀数组维护height数组只要找连续k个的最小值
代码:
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
#define maxn 1000010
int x[maxn],y[maxn],sa[maxn],height[maxn],
rank[maxn],c[maxn],a[maxn],h,t;
char s[maxn];
int n,m;
struct{
int num,ans;
}b[maxn];
void asa(int n,int m)
{
int p=,f=;
for (int i=;i<=m;i++) c[i]=;
for (int i=;i<=n;i++) c[x[i]=a[i]]++;
for (int i=;i<=m;i++) c[i]+=c[i-];
for (int i=n;i;i--) sa[c[x[i]]--]=i;
for(int i=;i<=n&&p<=n;i<<=)
{
p=;
for (int j=n-i+;j<=n;j++) y[++p]=j;
for (int j=;j<=n;j++)
if (sa[j]>i) y[++p]=sa[j]-i;
for (int j=;j<=m;j++) c[j]=;
for (int j=;j<=n;j++) c[x[y[j]]]++;
for (int j=;j<=m;j++) c[j]+=c[j-];
for (int j=n;j;j--) sa[c[x[y[j]]]--]=y[j];
swap(x,y); x[sa[]]=; p=;
for (int j=;j<=n;j++)
x[sa[j]]=y[sa[j]]==y[sa[j-]]&&y[sa[j]+i]==y[sa[j-]+i]
?p-:p++;
m=p;
}
for (int i=;i<=n;i++) rank[sa[i]]=i;
for (int i=;i<=n;i++)
{
int j=sa[rank[i]-];
if (f) f--;
while (a[i+f]==a[j+f]) f++;
height[rank[i]]=f;
}
}
void insert(int x,int y)
{
while (t>=h&&b[t].ans>=x) t--;
b[++t].num=y;
b[t].ans=x;
}
int main()
{
freopen("noip.in","r",stdin);
freopen("noip.out","w",stdout);
cin>>n>>m; m--;
for (int i=;i<=n;i++) cin>>a[i];
asa(n,);
for (int i=;i<=m-;i++) insert(height[i],i);
int ans=; h=;
for (int i=m;i<=n;i++)
{
insert(height[i],i);
if (t>=h&&b[h].num<i-m+) h++;
ans=max(b[h].ans,ans);
}
cout<<ans;
return ;
}
hdu3261的更多相关文章
随机推荐
- WinRar 压缩接压缩文件
windows WinRAR 定时压缩文件 命名当天时间 设置时间格式: set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" 指定 WinRAR ...
- 如何在同一台服务器上部署两个tomcat
因为测试的需要,有时我们必须在同一个服务器上部署两个tomcat,然后去做应用的部署,那么很多同学可能会觉得比较为难,找的资料也比较的不齐全,那么今天华华就来给大家讲讲如何部署2个tomcat,并能够 ...
- CSS :invalid 选择器
如果 input 元素中的值是非法的,实时提醒 <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...
- kdevelop 添加对 C++11的支持
工程--打开配置--显示高级--显示高级变量(打钩) CMAKE_CXX_FLAGS 项添加 -std=c++0x
- Libevent源码分析系列
1.使用libevent库 源码那么多,该怎么分析从哪分析呢?一个好的方法就是先用起来,会用了,然后去看底层相应的源码,这样比较有条理,自上向下掌握.下面用libevent库写个程序,每隔1秒 ...
- zabbix系列(八)zabbix添加对web页面url的状态监控
通过zabbi做web监控不仅仅可以监控到站点的响应时间,还可以根据站点返回的状态码,或者响应时间做报警 1.对需要监控的主机添加web监控 在configuration—hosts 中打开主机列 ...
- MariaDB基于GTID主从复制及多主复制
一.简单主从模式配置步骤(必须要mysql5.6,此处以maridb10.0.10为例) 1.配置主从节点的服务配置文件 # vim /etc/my.cnf 1.1.配置master节点: [mysq ...
- 如何优雅打印nginx header和body
场景 参考https://segmentfault.com/a/1190000000606867可以获取response的报文体,由于业务测试有获取响应头Header或响应体Body的需求,这里是通过 ...
- 基于Golang设计一套微服务架构[转]
article- @嘟嘟噜- May/26/2018 18:35:30 如何基于Golang设计一套微服务架构 微服务(Microservices),这个近几年我们经常听到.那么现在市面上的的微服 ...
- web前端开发分享-css,js提高篇
一. css基础知识掌握之后(个人的标准是:弄清块元素与内联元素的区别,弄清float的应用场景,弄清position[pə'zɪʃən] 下五个属性static['stætɪk],relative[ ...