博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3238 [Ahoi2013]差异
阅读量:6605 次
发布时间:2019-06-24

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

裸的SA?

SA求出来然后单调栈+height搞一搞就好了啊qwq

话说,为什么我这玩意自闭了啊

吸氧就能过 不吸就挂QAQ

好像是longlong强转出问题了emm

不管了我自闭了。

#include
#include
#include
#include
#define inf 20021225#define ll long long#define mxn 500010using namespace std;int sa[mxn],ht[mxn],rk[mxn],tp[mxn],pre[mxn],n,m;char ch[mxn];void sort(){ for(int i=1;i<=m;i++) pre[i]=0; for(int i=1;i<=n;i++) pre[rk[i]]++; for(int i=1;i<=m;i++) pre[i]+=pre[i-1]; for(int i=n;i;i--) sa[pre[rk[tp[i]]]--]=tp[i];}int id(char c){return c-'a'+1;}void getSA(){ m=26; for(int i=1;i<=n;i++) pre[rk[i]=id(ch[i])]++; for(int i=1;i<=m;i++) pre[i]+=pre[i-1]; for(int i=n;i;i--) sa[pre[rk[i]]--]=i; for(int k=1,num;num
<<=1) { num=0; for(int i=n-k+1;i<=n;i++) tp[++num]=i; for(int i=1;i<=n;i++) if(sa[i]>k) tp[++num]=sa[i]-k; sort(); memcpy(tp,rk,sizeof(rk)); rk[sa[1]]=num=1; for(int i=2;i<=n;i++) rk[sa[i]]=(tp[sa[i]]==tp[sa[i-1]]&&tp[sa[i]+k]==tp[sa[i-1]+k])?num:++num; m=num; }}void getheight(){ int k=0; for(int i=1;i<=n;i++) rk[sa[i]]=i; for(int i=1;i<=n;i++) { if(k) k--; int j=sa[rk[i]-1]; while(i+k<=n&&j+k<=n&&ch[j+k]==ch[i+k]) k++; ht[rk[i]]=k; }}int stk[mxn],tt,l[mxn],r[mxn];ll ans;int main(){ //freopen("10.in","r",stdin); scanf("%s",ch+1); n=strlen(ch+1);getSA();getheight(); for(int i=1;i<=n;i++) ans+=(ll)i*(n-1); ht[1]=ht[n+1]=-1;stk[tt=1]=1; for(int i=2;i<=n+1;i++) { while(tt&&ht[i]

 

转载于:https://www.cnblogs.com/hanyuweining/p/10321926.html

你可能感兴趣的文章
topcoder srm 465 div1
查看>>
多伦多大学 - 学习编程:写出高质量的代码
查看>>
C语言 scanf()和gets()函数的区别
查看>>
密码学===网站的安全登录认证设计
查看>>
如何检测域名是否被微信屏蔽 微信域名检测接口API是如何实现
查看>>
WPF与WinForm开发有什么区别?
查看>>
re模块 | Python 3.5
查看>>
POJ1611-The Suspects
查看>>
ROS学习之ShadowRepository
查看>>
javaScript 进阶篇
查看>>
leetcode 300. Longest Increasing Subsequence
查看>>
cnblogs开源合集
查看>>
(转)struts2.0配置文件、常量配置详解
查看>>
jQuery事件绑定
查看>>
linux 日常
查看>>
数据库的四种类型的完整性约束
查看>>
.net 防止sql注入
查看>>
解决mysql时区问题以及SSL问题
查看>>
[JavaScript] js验证身份证
查看>>
复习数据库3
查看>>