分析

TJOI白给题

建出sam,对于每个点如果它的子树siz和等于k

那么对于这个满足的点它有贡献的长度一定是一个连续区间

直接差分即可

代码

#include<bits/stdc++.h>
using namespace std;
int n,k,mx,ans,d[];
char s[];
struct SAM {
int mp[][],fa[],ed,ccnt,len[],siz[];
int head[],nxt[],to[],cnt;
inline void init(){
mx=;
cnt=ans=;
ccnt=ed=;
memset(d,,sizeof(d));
memset(mp,,sizeof(mp));
memset(fa,,sizeof(fa));
memset(to,,sizeof(to));
memset(len,,sizeof(len));
memset(siz,,sizeof(siz));
memset(nxt,,sizeof(nxt));
memset(head,,sizeof(head));
}
inline void add(int x,int y){
nxt[++cnt]=head[x];
head[x]=cnt;
to[cnt]=y;
}
inline void ins(int x,int n1){
int p=ed;
ed=++ccnt;
siz[ccnt]=;
len[ccnt]=n1;
while(p&&!mp[p][x]){
mp[p][x]=ed;
p=fa[p];
}
if(!p){
fa[ed]=;
return;
}
int q=mp[p][x];
if(len[q]==len[p]+){
fa[ed]=q;
return;
}
len[++ccnt]=len[p]+;
for(int i=;i<=;i++)mp[ccnt][i]=mp[q][i];
fa[ccnt]=fa[q];
fa[q]=ccnt;
fa[ed]=ccnt;
for(int i=p;mp[i][x]==q;i=fa[i])mp[i][x]=ccnt;
}
inline void build(){
for(int i=;i<=ccnt;i++)add(fa[i],i);
}
inline void dfs(int x){
for(int i=head[x];i;i=nxt[i])
dfs(to[i]),siz[x]+=siz[to[i]];
if(siz[x]==k&&len[fa[x]]+<=len[x])d[len[fa[x]]+]++,d[len[x]+]--;
}
};
SAM sam;
int main(){
int i,j,t;
scanf("%d",&t);
while(t--){
sam.init();
scanf("%s",s+);
n=strlen(s+);
scanf("%d",&k);
for(i=;i<=n;i++)sam.ins(s[i]-'a'+,i);
sam.build();
sam.dfs();
for(i=;i<=n;i++){
d[i]+=d[i-];
if(d[i]&&d[i]>=mx){
mx=d[i];
ans=i;
}
}
printf("%d\n",ans?ans:-);
}
return ;
}

p5341 [TJOI2019]甲苯先生和大中锋的字符串的更多相关文章

  1. 洛谷P5341 [TJOI2019]甲苯先生和大中锋的字符串

    原题链接P5341 [TJOI2019]甲苯先生和大中锋的字符串 题目描述 大中锋有一个长度为 n 的字符串,他只知道其中的一个子串是祖上传下来的宝藏的密码.但是由于字符串很长,大中锋很难将这些子串一 ...

  2. 【题解】Luogu P5341 [TJOI2019]甲苯先生和大中锋的字符串

    原题传送门 实际按照题意模拟就行 我们先求出字符串的sa 因为要在字符串中出现k次,所以我们枚举\(l,r(r-l+1=k)\)看一共有多少种合法的方案 合法方案的长度下界\(lb\)为\(Max(h ...

  3. luogu P5341 [TJOI2019]甲苯先生和大中锋的字符串

    传送门 考虑子串以及出现个数,可以发现SAM可以快速知道每种子串的出现次数,即所在状态的\(endpos\)集合大小,然后一个状态对应的子串长度是一段连续区间,所以可以对每个状态差分一下,就能统计答案 ...

  4. [TJOI2019]甲苯先生和大中锋的字符串——后缀自动机+差分

    题目链接: [TJOI2019]甲苯先生和大中锋的字符串 对原串建后缀自动机并维护$parent$树上每个点的子树大小,显然子树大小为$k$的节点所代表的子串出现过$k$次,那么我们需要将$[len[ ...

  5. 【洛谷 P5341】 [TJOI2019]甲苯先生和大中锋的字符串(后缀自动机)

    题目链接 建出\(sam\),求出parent tree上每个点的\(endpos\)集合大小. 如果等于\(k\),说明到达这个点的都可以.给\((len[fa(i)],len[i]]\)的\(cn ...

  6. Tjoi2019 甲苯先生和大中锋的字符串 后缀自动机_差分

    tjoi胆子好大,直接出了两道送分题...... 都 9102 年了,还有省选出模板题QAQ...... Code: #include <bits/stdc++.h> #define se ...

  7. [TJOI2019]甲苯先生和大中锋的字符串

    有个叫asuldb的神仙来嘲讽我 说这题SAM水题,而且SA过不了 然后我就用SA过了 显然是一个Height数组上长为k的滑块,判一下两边,差分一下就可以了 #include"cstdio ...

  8. [TJOI2019]大中锋的游乐场——最短路+DP

    题目链接: [TJOI2019]大中锋的游乐场 题目本质要求的还是最短路,但因为有第二维权值(汽水看成$+1$,汉堡看成$-1$)的限制,我们在最短路的基础上加上一维$f[i][j]$表示到达$i$节 ...

  9. [TJOI2019]甲苯先生的滚榜——非旋转treap

    题目链接: [TJOI2019]甲苯先生的滚榜 要求维护一个二维权值的集合并支持单点修改,用平衡树维护即可. 因为$n\le 10^6$但$m\le 10^5$,所以最多只有$10^5$个人被操作. ...

随机推荐

  1. js 一道题目引发的正则的学习

    正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...

  2. Apache solr 6.6.0安装

    Apache solr 6.6.0安装 最近使用了Apache solr搜索引擎框架,solr是基于lucene的一个搜索服务器,lucene也是Apache的一个开源项目:对于学习搜索引擎来说,这个 ...

  3. 多线程04-ThreadPriority

        ; i < ; i++)             {                 Thread.Sleep();                 Console.WriteLine( ...

  4. python之getopt

    getopt可以分析输入的参数,根据不同的参数输入不同的命令 getopt.getopt( [命令行参数列表], "短选项", "长选项列表" ) getopt ...

  5. linux下的dd命令使用详解

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  6. getCurrentSession 与 openSession区别

    getCurrentSession () 使用当前的session openSession()重新建立一个新的session 使用SessionFactory.getCurrentSession()需 ...

  7. JS 总结之关于 this 应该知道的几个点

    JS 中的 this 对每位前端工程师都不陌生,经常看到对象这里 this 那里 this,那什么是 this?答案就是上下文对象,即被调用函数所处的环境,也就是说,this 在函数内部指向了调用函数 ...

  8. [转载]企业级应用架构(NHibernater+Spring.Net+MVC3)

    本人已经从事公司两套这类架构系统的开发工作啦!对于这套架构,我惊叹不已!BPS和CMS系统都是采用这套架构.但本人也同时渐渐发现了这套架构有诸多 不足之处,于是本人利用闲暇时光进一步改进了这套架构.新 ...

  9. 深入理解js闭包【写的通俗易懂,很值的阅读】

    详细内容在下面这个链接里面: https://www.cnblogs.com/uedt/archive/2010/10/28/1863389.html 能写出这样的文章,定是大佬!

  10. HTML文档流和脱离文档流

    文档流:也就是我们通常看到的由左到右.由上而下的元素排列形式,在网页中每个元素都是默认按照这个顺序进行排序和显示的. 脱离文档流:元素脱离文档流之后,将不再在文档流中占据空间,而是处于浮动状态(可以理 ...