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的更多相关文章
随机推荐
- 图片压缩之-JPEGCodec失效替换方案
今天遇到一个405错误,提示Method not allowed ,一直以为是控制器出问题了,后来发现实际上是Jpeg库有问题.刚开始用这个库,没想到已经不推荐使用了.下面是网上找的解决方案.http ...
- Selenium自动化Page模式(Python)
Selenium是当前主流的web自动化工具,提供了多种浏览器的支持(Chrome,Firefox, IE等等),当然大家也可以用自己喜欢的语言(Java,C#,Python等)来写用例,很容易上手. ...
- u-boot移植(十二)---代码修改---支持DM9000网卡
一.准备工作 1.1 原理图 CONFIG_DM9000_BASE 片选信号是接在nGCS4引脚,若要确定网卡的基地址,则要根据片选信号的接口去确定. 在三星2440的DATASHEET中memory ...
- div背景透明内容不透明与0.5PX边框兼容设置
1.问题:设置 border-width:0.5px; 并兼容安卓和苹果移动端. 兼容:苹果IOS的 safari 支持浮点数边框,安卓浏览器不支持,会四舍五入到1px.不同浏览器效果额不同 解 ...
- leetcode --binary tree
1. 求深度: recursive 遍历左右子树,递归跳出时每次加一. int maxDepth(node * root) { if(roor==NULL) return 0; int leftdep ...
- The provider is not compatible with the version of Oracle client
保留下安装文件夹里的所有文件.然后把我那个很小应用软件(需要访问远程的oracle数据库)放在这个文件夹里.删除一下直接感觉无用的文件,先抽取可 能用不着的文件,保留放在另一个备用的文件夹里,然后运行 ...
- json转对象-对象转json
我们经常会用到json,所以在c#里就会经常有对象or对象数组转json,json转对象or对象数组. ps:对象或者json可能是{}or[],也就是json属性or json数组形式,或者json ...
- 第2章 线性表《C#数据结构和算法》
( )除第一个位置的数据 元素外,其它数据元素位置的前面都只有一个数据元素:( )除最后一个位置的 数据元素外,其它数据元素位置的后面都只有一个元素.也就是说,数据元素是 一个接一个的排列.因此,可以 ...
- android彻底关闭应用程序方法
Android SDK > 7(Android2.1)之后,即Android2.2及以后版本彻底关闭应用的方法,目前试验只有一下方法有效: Intent startMain = new Inte ...
- 用Quartz 2D画小黄人
第一步: 先创建一个OneView类,并在storyboard里边拖拽一个UIview,将这个UIview的类改成OneView.如图所示: 第二步: 在新创建的Oneview里,补齐下列代码: // ...