SAM一道很裸的题。。。

题意很明确,不再阐述。

做法很简单:找到所有出现次数为 \(k\) 的子串,然后统计。

怎么找到这些字符串呢?SAM 只能找出等价类啊。

注意 parent tree 的父亲节点的长度 +1 即该等价类中长度最短的字符串,那么若我们先通过拓扑排序求出每个等价类在原串中出现次次数 \(siz[u]\),该等价类的所有字符串都出现了 \(siz[u]\) 次,那么就变为了一个序列操作题:

  1. 区间加 \(1\)
  2. 查询前缀和

    而所有 \(2\) 操作都在 \(1\) 操作之后,我们可以用 \(O(n)\) 的差分优秀地解决这个问题。

贴代码:

#include<cstring>
#include<cstdio>
const int M=1e5+5;
int T,n,k,tot=1,lst=1,sum[M],id[M<<1],CB[M<<1],siz[M<<1];char s[M];
struct Node{
int chi[26];
int f,len;
Node():f(0),len(0){memset(chi,0,104);}
}SAM[M<<1];
inline void Insert(const int&s){
int q,p,nq,np;
p=lst;np=lst=++tot;
SAM[np].len=SAM[p].len+1;siz[np]=1;
for(;p&&!SAM[p].chi[s];p=SAM[p].f)SAM[p].chi[s]=np;
if(!p)SAM[np].f=1;
else{
q=SAM[p].chi[s];
if(SAM[q].len==SAM[p].len+1)SAM[np].f=q;
else{
SAM[nq=++tot]=SAM[q];
SAM[np].f=SAM[q].f=nq;
SAM[nq].len=SAM[p].len+1;
for(;p&&SAM[p].chi[s]==q;p=SAM[p].f)SAM[p].chi[s]=nq;
}
}
}
inline int Solve(){
register int i,u,ans=n+1;
for(i=1;i<=tot;++i)++CB[SAM[i].len];
for(i=1;i<=tot;++i)CB[i]+=CB[i-1];
for(i=1;i<=tot;++i)id[CB[SAM[i].len]--]=i;
for(i=tot;i>=1;--i){
u=id[i];
siz[SAM[u].f]+=siz[u];
if(siz[u]==k)++sum[SAM[u].len],--sum[SAM[SAM[u].f].len];
}
for(i=n;i>=1;--i){
sum[i]+=sum[i+1];
if(sum[i]>sum[ans])ans=i;
}
ans=sum[ans]?ans:-1;
while(tot)id[tot]=CB[tot]=siz[tot]=0,SAM[tot--]=Node();
for(i=1;i<=n;++i)sum[i]=0;
tot=lst=1;
return ans;
}
signed main(){
register int i;
scanf("%d",&T);
while(T--){
scanf("%s%d",s,&k);n=strlen(s);
for(i=0;i<n;++i)Insert(s[i]-97),s[i]=0;
printf("%d\n",Solve());
}
}

LGP5341题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. Linux防火墙firewalld安全设置

    背景描述 防火墙是具有很好的保护作用.入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机.在公司里数据安全是最重要的,要求安全部门进行全公司进行服务器防火墙安全搭建,在原有的基础上进行安全的防火墙 ...

  2. 【转载】Nginx简介及使用Nginx实现负载均衡的原理

    原文地址:http://blog.csdn.net/u014749862/article/details/50522276 是什么? Nginx 这个轻量级.高性能的 web server 主要可以干 ...

  3. yum本地源仓库安装报错 被锁定如何解决?

    yum安装报错被锁定如何解决 上图!!!!!如图的报错 解决方法: 是不是很简单 智商在地上摩擦~~~

  4. http的报文结构和状态码总结

    1.HTTP报文结构 请求报文 报文由三个部分组成,即开始行.首部行和实体主体.在请求报文中,开始行就是请求行. 响应报文 响应报文的开始行是状态行.状态行包括三项内容,即HTTP的版本,状态码,以及 ...

  5. 35、python并发编程之多线程(理论篇)

    一 什么是线程 二 线程的创建开销小 三 线程与进程的区别 四 为何要用多线程 五 多线程的应用举例 六 经典的线程模型(了解) 七 POSIX线程(了解) 八 在用户空间实现的线程(了解) 九 在内 ...

  6. app内嵌H5网页(webviewJavaScriptBridge)

    摘要:使用的插件为webviewJavaScriptBridge,app端需要引入一下这个包,html页面只需一段JS代码 与IOS交互 <! 申明交互(此处代码固定) > functio ...

  7. ios开发 Rsa签名 base64转码

    因为公司要求做了一个加密  网上的资料少有可用的  于是我看到了一位大神的曙光 但是未介绍使用方法 然后另一位大神给予了使用方法 但是没有把库给出来   我整理了一下  希望大家看的有些启发 证书生成 ...

  8. logstash根据日志关键词报警

    logstash是可以根据日志级别,日志类型进行报警通知的. 这次精简教程,排除filebeat自带的#include_lines: ['^ERR', '^WARN']写法,直接使用logstash报 ...

  9. 防世界之Web_NewsCenter

    题目:  打开实验环境一看,就一个搜索框,emmm试下有没有SQL注入点,SQL注入步骤传送门https://www.cnblogs.com/shacker/p/15917173.html 爆出数据, ...

  10. IC应届生40万白菜价!从业多年的资深专家手把手指导你如何选择offer!

    这是IC男奋斗史的第1篇原创 关注公众号[IC男奋斗史],让我们一起撸起袖子加油干! 芯片行业2021年的秋招市场又是风起云涌.高手过招,继OPPO给应届生开出40万白菜价offer之后,平头哥又被爆 ...