传送门

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

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<queue>
#include<map>
#include<set>
#define LL long long
#define db doubleusing namespace std;
const int N=2e5+10;
/*int rd()
{int x=0,w=1;char ch=0;while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}return x*w;
}*/ //垃圾luogu数据卡读优
int to[N],nt[N],hd[N],tot;
void add(int x,int y)
{++tot,to[tot]=y,nt[tot]=hd[x],hd[x]=tot;
}
char cc[N];
int n,kk,b[N],la,tt,fa[N],ch[N][26],len[N],sz[N];
int newnode(){++tt,fa[tt]=len[tt]=sz[tt]=0;memset(ch[tt],0,sizeof(int)*26);return tt;}
void extd(int x)
{int np=newnode(),p=la;len[np]=len[p]+1,sz[np]=1,la=np;while(p&&!ch[p][x]) ch[p][x]=np,p=fa[p];if(!p) fa[np]=1;else{int q=ch[p][x];if(len[q]==len[p]+1) fa[np]=q;else{int nq=newnode();fa[nq]=fa[q],len[nq]=len[p]+1,memcpy(ch[nq],ch[q],sizeof(ch[q]));fa[np]=fa[q]=nq;while(p&&ch[p][x]==q) ch[p][x]=nq,p=fa[p];}}
}
void dfs(int x)
{for(int i=hd[x];i;i=nt[i])dfs(to[i]),sz[x]+=sz[to[i]];if(sz[x]==kk) ++b[len[fa[x]]+1],--b[len[x]+1];
}int main()
{int T;scanf("%d",&T);while(T--){scanf("%s",cc+1);n=strlen(cc+1);scanf("%d",&kk);for(int i=1;i<=n;++i) b[i]=0;la=1,tt=0,newnode();for(int i=1;i<=n;++i) extd(cc[i]-'a');memset(hd,0,sizeof(int)*(tt+3)),tot=0;for(int i=2;i<=tt;++i) add(fa[i],i);dfs(1);int ans=-1,ma=0;for(int i=1;i<=n;++i) b[i]+=b[i-1];for(int i=n;i;--i)if(ma<b[i]) ma=b[i],ans=i;printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/smyjr/p/10841271.html

luogu P5341 [TJOI2019]甲苯先生和大中锋的字符串相关推荐

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

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

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

    正题 题目链接:https://www.luogu.com.cn/problem/P5341 题目大意 给出一个字符串,求出现次数恰好为kkk的子串中,出现最多的长度. 解题思路 先根据TTT构建一个 ...

  3. luogu P5338 [TJOI2019]甲苯先生的滚榜

    传送门 首先,排名系统,一看就知道是原题,可以上平衡树来维护 然后考虑一种比较朴素的想法,因为我们要知道排名在一个人前面的人数,也就是AC数比他多的人数+AC数一样并且罚时少的人数,所以考虑维护那两个 ...

  4. 【题解】Luogu P5338 [TJOI2019]甲苯先生的滚榜

    原题传送门 这题明显可以平衡树直接大力整,所以我要说一下线段树+树状数组的做法 实际线段树+树状数组的做法也很暴力 我们先用树状数组维护每个ac数量有多少个队伍.这样就能快速求出有多少队伍ac数比现在 ...

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

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

  6. redis:redis介绍和安装、普通连接和连接池、redis 5大数据类型之字符串、Hash、列表、其他操作(通用)、管道、django使用redis、接口缓存

    目录 一. redis介绍和安装 二. 普通连接和连接池 三. redis 5大数据类型之字符串 四. redis 5大数据类型之Hash 五. redis 5大数据类型之列表 六. 其他操作(通用) ...

  7. JAVA中如何将大数字或字符串放进数组

    JAVA中如何将大数字或字符串放进数组 在JAVA学习过程中字符串.数组.数字之间的 的转换经常用到,记录一些非常基础的转换. 1.将数字转换为字符串:String str = String.valu ...

  8. [洛谷P5340][TJOI2019]大中锋的游乐场

    题目大意:有$n(n\leqslant10^4)$个点,$m(m\leqslant10^5)$条边的无向图,每个点有一个属性$A/B$,要求$|cnt_A-cnt_B|\leqslant k(k\le ...

  9. c语言中怎样变大输出的字符串,C语言。要输入一个超大数比如 111111111111111111111111111111111111111 怎样用字符串数组求各位的和呢?...

    满意答案 muwen3798 2014.01.04 采纳率:45%    等级:13 已帮助:9415人 这个超大数不是10的100次方个数,而是一个数,只不过有100位,那么我们会用一个整型的数据存 ...

最新文章

  1. 理解 IEnumerable 与 IEnumerator
  2. spring-boot的access日志格式修改
  3. 推荐系统之信息茧房问题
  4. poj 1723 中位数
  5. 分页存储过程2005
  6. Android:安卓虚拟机(Dalvik ART)学习
  7. linux版svn 软件,可以媲美TortoiseSVN的Linux版SVN客户端软件RabbitVCS
  8. 八、Servlet容器
  9. JS—— 常用图片后缀正则校验
  10. signature=1be7575a614ba3597c2c53247a739d1c,18-02-07【摄影机系统】ARRI大画幅摄影机系统常见问题解答...
  11. EBS 取消PO订单、订单行、订单发运行
  12. Manjaro引导项丢失修复
  13. 智汀智能家居知识普及篇——为什么智能家居在国内不温不火?
  14. Linux增加四个用户分别并命名,16、Linux用户和组管理命令演练和实战应用,,150R...
  15. 计算机用的云电脑,怎么使用云电脑玩端游
  16. 为什么区块链技术普及能创造比腾讯阿里更大的公司?
  17. uniapp 10进制、字符串转16进制码
  18. 视频教程-JSON基础入门实战讲解-JavaScript
  19. 使用word 2013 发布csdn博客
  20. 禁止的回文子串 Dyslexic Gollum

热门文章

  1. Express 中间件 body-parser 原理分析
  2. 浅谈EventBus的使用原理
  3. ipad Simulator 的home 键的调用
  4. nginx配置wordprocess访问wp-admin自动加斜杠配置实例
  5. Oracle教程之SGA_MAX_SIZE参数
  6. EPCS 无法配置FPGA的解决方法以及JTAG、AS调试总结
  7. 利用UTL_FILE包实现文件I/O操作
  8. mysql text 查询速度_数据库学习之让索引加快查询速度(四)
  9. Java NIO网络编程之群聊系统
  10. Python机器学习:SVM005SVM使用多项式特征