博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bzoj2882 工艺 [线性算法]
阅读量:7223 次
发布时间:2019-06-29

本文共 1260 字,大约阅读时间需要 4 分钟。

后缀自动机题解 -> http://www.cnblogs.com/SilverNebula/p/6420601.html

后缀自动机敲完,看了下排行,wc为什么别人跑得这么快?……是诶,这最小表示法用后缀自动机当然慢了

依稀记得最小表示法有超快的算法,于是去查了查,有$O(n)$的算法 (后缀自动机均摊也是$O(n)$然而常数大)

找到了这篇讲解-> http://www.cnblogs.com/mjy0724/p/4625928.html

 

这样就跑得飞快了(380ms,不知道那些几十ms的怎么跑出来的)

1 /*by SilverN*/ 2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 const int mxn=600010; 9 int read(){10 int x=0,f=1;char ch=getchar();11 while(ch<'0' || ch>'9'){
if(ch=='-')f=-1;ch=getchar();}12 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}13 return x*f;14 }15 int n,a[mxn];16 int solve(){17 int i,j,ed=n*2;18 i=1;j=2;19 while(i<=n && j<=n){20 int k=0;21 while(j+k<=ed && a[i+k]==a[j+k])k++;22 if(j+k>ed)break;23 if(a[i+k]>a[j+k]){24 i=max(j,i+k+1);25 j=i+1;26 }27 else j=j+k+1;28 }29 return min(i,j);30 }31 int main(){32 int i,j;33 n=read();34 for(i=1;i<=n;i++){35 a[i]=read();a[i+n]=a[i];36 }37 int ans=solve();38 int ed=ans+n-1;39 for(i=ans;i

 

转载于:https://www.cnblogs.com/SilverNebula/p/6420632.html

你可能感兴趣的文章
javascript基于原型的语言的特点
查看>>
我的爱情1
查看>>
关于Cocos2d-x中地图轮播的实现
查看>>
Zookeeper运维小结--CancelledKeyException
查看>>
POJ 2104(K-th Number-区间第k大-主席树)
查看>>
HDOJ 2689
查看>>
[置顶] js综合应用:表格的四则运算
查看>>
SQLServer 2008 :error 40 出现连接错误
查看>>
VS2013 单元测试(使用VS2013自带的单元测试)
查看>>
git add --all 为啥不能添加空文件夹,这样设计的初衷是
查看>>
Linux find/grep命令
查看>>
【数据结构与算法】(二) c 语言链表的简单操作
查看>>
线程相关参数
查看>>
改造 Android 官方架构组件 ViewModel
查看>>
贾跃亭被指拿恒大的投资款告投资人 总费用超2000万
查看>>
春运守护者 大陆首批台湾籍乘务长黄佳莹
查看>>
潮汕明代皇封御葬古墓受损追踪:当地相关部门介入
查看>>
使用js操作checkbox
查看>>
分享阿里云服务器系列之弹性裸金属服务器
查看>>
Merge k Sorted Lists@LeetCode
查看>>