HDU 6194

输入一个字符串,求出现K次得子串个数

我的做法是求出大于等于K次的子串个数-大于等于K+1次的子串个数

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <string>
#include <stdlib.h>
using namespace std;
typedef long long LL;
const int maxn = 1e5 + 10;
const int maxx = 127000;
struct Node {int pre, nxt[26];int step, number1, num;void Clear() {step = number1 = num = 0;pre = -1;memset(nxt, -1, sizeof(nxt));}
} st[maxn<<1];
int t, root, last, cur, k;
LL ans, tmp;
char str[maxn];void init() {cur = 0;root = last = cur++;st[root].Clear();
}void extend(int w) {int np = cur++, p = last;last = np;st[np].Clear();st[np].step = st[p].step+1;while(p != -1 && st[p].nxt[w] == -1)st[p].nxt[w] = np, p = st[p].pre;if(p == -1)st[np].pre = root;else {int q = st[p].nxt[w];if(st[q].step == st[p].step+1)st[np].pre = q;else {int nq = cur++;st[nq].Clear();st[nq].number1 = st[q].number1;st[nq].num = st[q].num;memcpy(st[nq].nxt, st[q].nxt, sizeof(st[q].nxt));st[nq].pre = st[q].pre;st[nq].step = st[p].step+1;st[np].pre = st[q].pre = nq;while(p != -1 && st[p].nxt[w] == q)st[p].nxt[w] = nq, p = st[p].pre;}}int f1 = 0, f2 = 0, pp = np;while(np!=-1 && (!f1 || !f2)){if(f1 == 0 && st[np].number1 < k) {st[np].number1++;if(st[np].number1 == k){ans+=(LL)st[np].step-st[st[np].pre].step;f1 = 1;}}if(f2 == 0 && st[np].num < k+1) {st[np].num++;if(st[np].num == k+1){tmp+=(LL)st[np].step-st[st[np].pre].step;f2 = 1;}}np = st[np].pre;}
}void solve() {scanf("%d", &t);while(t--) {scanf("%d%s", &k, str);init();ans = tmp = 0;int len = strlen(str);for(int i = 0; i < len; i++)extend(str[i]-'a');printf("%lld\n", ans-tmp);}
}int main() {solve();
}

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 :后缀数组+单调队列 | 后缀自动机

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

  3. 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|] ,长度 ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 重磅:2019年全国普通高校学科竞赛排行榜出炉!
  2. Notification详解
  3. 远程研发能有多高效?手淘新版本上线只用了5天!
  4. XHTML、HTML4,HTML5 之间的区别
  5. 信息竞赛进阶指南--中缀表达式转后缀表达式并求值(模板)
  6. 05 | 数组:为什么很多编程语言中数组都从0开始编号?
  7. Win10显示此应用无法在你的电脑上运行 此应用无法在你的电脑上运行处理办法
  8. 一种内核到用户空间的高效数据传输技术
  9. 多台电脑集群运算_答疑 | 三维建模的【电脑】配置问题
  10. linux扩展磁盘空间命令_在Linux上监视磁盘空间– SQL Server DBA的有用命令
  11. php登录注册案例,php实现登陆与注册的案例
  12. 人工智能时代!Python跃升编程语言第一名!
  13. 在 Linux 平台中调试 C/C++ 内存泄漏方法
  14. 很有意思的HDB3编解码--C++实现
  15. html青蛙跳跳游戏,《小青蛙跳跳》小班游戏教案
  16. chm 文件的阅读、制作和反编译
  17. 敬业签手机版便签软件怎么绑定QQ或微信互联登录?
  18. NYOJ-110-剑客决斗
  19. Java操作Excel并显示到网页
  20. python爬虫requests源码链家_python爬虫爬取链家二手房信息

热门文章

  1. ROSMoveit中机械臂的点动(Jog)实现
  2. python字典键值对的添加和遍历
  3. python操作微信自动发消息(微信聊天机器人)
  4. Redis 一主一从
  5. python unpacking_Python解包(Unpacking)
  6. SpringBoot入门到精通 idea教学 (余胜军通俗易懂版本)
  7. 基于easyTrader部署自动化交易(一)
  8. Resharper快捷键使用
  9. QTextLine、QGlyphRun、QTextLayout
  10. ping 超时原因总结