求一个字符串中正好出现了K次的子串,可以用后缀自动机来做

附上后缀自动机的应用:https://blog.csdn.net/clover_hxy/article/details/68059043

以及代码出处:https://www.cnblogs.com/forever97/p/hdu6194.html

本来套了个kuangbin模板,提交结果内存爆了,因为用的都是指针(64位系统指针占用空间比int大)

就直接套用别人写的代码了

写这题刚学习了后缀自动机的结构和构造,勉强理解了大概

后缀自动机的用处很多,以后要多做一些应用题,加深理解

#include <cstdio>
#include<iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=200010;
char s[N];
struct SAM{int p,q,np,nq,cnt,lst,a[N][26],l[N],f[N],tot;int Tr(char c){return c-'a';}int val(int c){return l[c]-l[f[c]];} SAM(){cnt=0;lst=++cnt;}void Initialize(){memset(l,0,sizeof(int)*(cnt+1));memset(f,0,sizeof(int)*(cnt+1));for(int i=0;i<=cnt;i++)for(int j=0;j<26;j++)a[i][j]=0;cnt=0;lst=++cnt;}void extend(int c){p=lst;np=lst=++cnt;l[np]=l[p]+1;while(!a[p][c]&&p)a[p][c]=np,p=f[p];if(!p){f[np]=1;}else{q=a[p][c];if(l[p]+1==l[q])f[np]=q;else{nq=++cnt;l[nq]=l[p]+1;memcpy(a[nq],a[q],sizeof(a[q]));f[nq]=f[q]; f[np]=f[q]=nq;while(a[p][c]==q)a[p][c]=nq,p=f[p];}}}int b[N],x[N],r[N];void build(int len){Initialize();for(int i=1;i<=len;i++)extend(Tr(s[i]));}void solve(){int ans=0,k;scanf("%d",&k);scanf("%s",s+1); //从下标1开始int len=strlen(s+1);build(len);memset(r,0,sizeof(int)*(cnt+1));memset(b,0,sizeof(int)*(cnt+1));for(int i=1;i<=cnt;i++)b[l[i]]++;for(int i=1;i<=len;i++)b[i]+=b[i-1];for(int i=1;i<=cnt;i++)x[b[l[i]]--]=i;for(int i=p=1;i<=len;i++){p=a[p][Tr(s[i])];r[p]++;}for(int i=cnt;i;i--)r[f[x[i]]]+=r[x[i]];for(int i=1;i<=cnt;i++)if(r[x[i]]==k)ans+=val(x[i]);printf("%d\n",ans);}
}sam;
int T;
int main(){scanf("%d",&T);while(T--){sam.solve();}return 0;
}

HDU-6194 string string string相关推荐

  1. HDU 6194:string string string

    参考博客:HDU 6194 string string string (2017沈阳网赛-后缀数组) 下面题解来自该博客 题意: 告诉你一个字符串和k , 求这个字符串中有多少不同的子串恰好出现了k ...

  2. HDU 6194 string string string

    HDU 6194 输入一个字符串,求出现K次得子串个数 我的做法是求出大于等于K次的子串个数-大于等于K+1次的子串个数 #include <stdio.h> #include <s ...

  3. HDU 6194 string string string :后缀数组+单调队列 | 后缀自动机

    题意:给出一个字符串,求出出现了恰好k次的子串的个数. 题解:恰好k次 = 至少k次 - 至少k+1次.答案转化为求至少出现k次的子串个数统计.构造好后缀数组以及很重要的Height数组之后.用一个k ...

  4. hdu 6086 Rikka with String(AC自动机+状压dp)

    题目链接:hdu 6086 Rikka with String 题意: 给你n个只含01的串,和一个长度L,现在让你构造出满足s[i]≠s[|s|−i+1] for all i∈[1,|s|] ,长度 ...

  5. static string java_java:String类、static关键字、Arrays类、 Math类

    public voidStrMethodTest(){/** public int length () :返回此字符串的长度. * public String concat (String str) ...

  6. 转换ArrayList String 到String []数组[重复]

    本文翻译自:Convert ArrayList to String[] array [duplicate] This question already has an answer here: 这个问题 ...

  7. C#中的String和string有什么区别?还有ref关键字怎么用?

    String 和 string 没有区别 string 是 String 的别名 ref 关键字一般只用于函数参数中,这个参数是 struct 类型,而不是 class 类型 因为 class 类型在 ...

  8. shell中$后加引号有什么用($string和$'string')

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 有些时候在某些服务管理脚本中看到$"$string& ...

  9. 【错误记录】Kotlin 编译报错 ( Type mismatch: inferred type is String? but String was expected )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Google Play 上架要求 Android 的编译版本 和 目标版本都要高于 30 才可以上传 ; 将 Android 的编译版本 和 目标版 ...

  10. C#String与string大小写的区别

    1.string是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色)   2.C# string映射为.net Framework的String   3.如果用 ...

最新文章

  1. 外贸网络推广分享让网站文章标题优化效果更好地小技巧!
  2. 004_Queue消息模式发送文本消息
  3. Oracle编程入门经典 第9章 掌握SQL*Plus
  4. Ubuntu 默认输入法切换(更改)--- 解决中文输入问题
  5. 我是一位老师,讲课是我的乐趣,可是……
  6. JAVA8的学习笔记之Collection
  7. System Center Operations Manager 简介 [SCOM中文系列之一]
  8. IIS7里的appcmd命令
  9. Luogu4114 Qtree1
  10. CPU自制入门 第三章 编程
  11. python 将微信聊天记录生成词云
  12. poi根据模版生成多页word,并压缩下载
  13. 吃瓜 || 一文看懂BCH分叉事件始末
  14. AXI总线学习-------从零开始详细学-------------连载(7)读写处理架构,burst介绍,burst细节定义(burst type burst address)
  15. Fn按键失灵后的软件替代方案
  16. 秋招Java开发工程师笔试_美团Java工程师面试题(2018秋招)
  17. python基础分析_数据分析之Python基础
  18. 用 M1 MacBook 当主力开发机:程序员使用半个月后如是说
  19. 拟真机器人拯救者奖励_《X战警:黑队》万磁王大战哨兵机器人,他就是变种人的拯救者!...
  20. 戚风蛋糕,华丽的转身——演绎失败与成功的大转变

热门文章

  1. JavaWeb开发 —— Maven
  2. 解决“事件ID(487)的描述(在资源(Zend Optimizer)中)无法找到”问题
  3. JVM3:实战:内存分配与回收策略
  4. 各大平台免费接口,非常适用
  5. 过勇 清华计算机系,16位清华学霸的简历—比你牛的人还比你努力,膝盖已跪碎...
  6. Handler---
  7. Java设计模式策略模式(附实例代码)每天一学设计模式
  8. DB2 元换算成万元 (除以/10000)
  9. 非线性回归算法--学习笔记
  10. 韩顺平Oracle笔记