链接

http://acm.hdu.edu.cn/showproblem.php?pid=6194

题解

我竟然质疑自己过了将近20题的模板T_T,而且最后发现模板对的不得了,是我自己想错了
统计出现次数大于等于kkk的很简单吧,就在后缀数组中求以每个后缀为结尾的长度为kkk的区间的串的长度,再减去重复算的
这题就用出现次数≥k\geq k≥k的减去出现次数≥k+1\geq k+1≥k+1的就好了

代码

#include <bits/stdc++.h>
#define maxn 100010
#define maxk 17
#define cl(x) memset(x,0,sizeof(x))
using namespace std;
typedef long long ll;
struct SuffixArray
{int sa[maxn], rank[maxn], ws[maxn], wv[maxn], wa[maxn], wb[maxn], height[maxn], st[maxk+2][maxn], N;bool cmp(int *r, int a, int b, int l){return r[a]==r[b] and r[a+l]==r[b+l];}void clear(){cl(sa), cl(rank), cl(ws), cl(wv), cl(wa), cl(wb), cl(height);}void build(int *r, int n, int m){N=n;n++;int i, j, k=0, p, *x=wa, *y=wb, *t;for(i=0;i<m;i++)ws[i]=0;for(i=0;i<n;i++)ws[x[i]=r[i]]++;for(i=1;i<m;i++)ws[i]+=ws[i-1];for(i=n-1;i>=0;i--)sa[--ws[x[i]]]=i;for(p=j=1;p<n;j<<=1,m=p){for(p=0,i=n-j;i<n;i++)y[p++]=i;for(i=0;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;for(i=0;i<n;i++)wv[i]=x[y[i]];for(i=0;i<m;i++)ws[i]=0;for(i=0;i<n;i++)ws[wv[i]]++;for(i=1;i<m;i++)ws[i]+=ws[i-1];for(i=n-1;i>=0;i--)sa[--ws[wv[i]]]=y[i];for(t=x,x=y,y=t,p=1,i=1,x[sa[0]]=0;i<n;i++)x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++;}for(i=0;i<n;i++)rank[sa[i]]=i;for(i=0;i<n-1;height[rank[i++]]=k)for(k?k--:0,j=sa[rank[i]-1];r[i+k]==r[j+k];k++);}void build_st(){int i, k;for(i=1;i<=N;i++)st[0][i]=height[i];for(k=1;k<=maxk;k++)for(i=1;i+(1<<k)-1<=N;i++)st[k][i]=min(st[k-1][i],st[k-1][i+(1<<k-1)]);}int lcp(int x, int y){int l=rank[x], r=rank[y];if(l>r)swap(l,r);if(l==r)return N-sa[l];int t=log2(r-l);return min(st[t][l+1],st[t][r-(1<<t)+1]);}
}SA;
int r[maxn], n, k;
char s[maxn];
ll ans, T;
int main()
{ll i;scanf("%lld",&T);while(T--){scanf("%d%s",&k,s);n=strlen(s);for(i=0;i<n;i++)r[i]=s[i]; r[n]=0;SA.clear();SA.build(r,n,300);SA.build_st();ans=0;for(i=k;i<=n;i++){auto x=SA.lcp(SA.sa[i],SA.sa[i-k+1]), y=SA.lcp(SA.sa[i],SA.sa[i-k]);ans+=x-y;}k++;for(i=k;i<=n;i++){auto x=SA.lcp(SA.sa[i],SA.sa[i-k+1]), y=SA.lcp(SA.sa[i],SA.sa[i-k]);ans-=x-y;}printf("%lld\n",ans);}return 0;
}

hdu6194 string string string相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. Java提升篇:理解String 及 String.intern() 在实际中的应用

    String的深入解析 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些 ...

  8. python timeit class Timer()类 timeit(string, string) repeat(string, string) default_timer() 耗时检测 执行速度

    #! /usr/bin/env python3"""Tool for measuring execution time of small code snippets. 用 ...

  9. 警惕使用WebClient.DownloadFile(string uri,string filePath)方法

    警惕使用WebClient.DownloadFile(string uri,string filePath)方法 原文:警惕使用WebClient.DownloadFile(string uri,st ...

  10. c++ string replace_Java——String类的常用方法总结

    点击上方"IT咸鱼",星标公众号重磅干货,第一时间送达 一.String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象. ...

最新文章

  1. 最小树形图及其生产方法
  2. 利用FreeImage将gif图像转为opencv中的Mat
  3. 教育培训行业如何在抖音快速获客、变现?
  4. jQuery选择器 (详解)
  5. Android学习笔记四十Preference使用
  6. paip.session的调试in php
  7. linux/windows查询文件特定内容并写入目标文件
  8. python做var模型的滞后阶数怎么确定_请问关于VAR模型的滞后阶数怎么确定?
  9. NOI2014--起床困难症
  10. JQuery中三元运算
  11. QQ空间无法修改“空间描述”修复方法
  12. linux进程命令at,Linux进程管理命令之sa/at/atq。
  13. [网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防护
  14. 程序员过高工资导致加班?应该降低程序员工资?网友:放过其他苦逼的程序员吧
  15. cv2.warpAffine
  16. 大一学生接触人工智能的路程
  17. RISC-V 开发工具链的使用
  18. Python----条件语句
  19. php __destruct反序列化原理
  20. 从user 登陆开始

热门文章

  1. 在Ubuntu中出现权限不够和找不到文件的解决方法
  2. Gif表情包如何用视频制作?教你一键快速制作gif表情包
  3. 怎么调整gif表情包的比例?
  4. 五 、Kotlin学习之命名参数默认参数
  5. linux截图后不见,xubuntu14.04截图,彻底到Linux一个半月后记
  6. 彻底搞懂ResNet50
  7. maven 修改maven本地仓库的位置
  8. 机械键盘的 黑轴/茶轴/青轴/红轴 有什么区别
  9. 智慧燃气系统基于GIS技术的搭建
  10. Django案例:显示图书的信息books