HDU 6194 string string string
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相关推荐
- HDU 6194:string string string
参考博客:HDU 6194 string string string (2017沈阳网赛-后缀数组) 下面题解来自该博客 题意: 告诉你一个字符串和k , 求这个字符串中有多少不同的子串恰好出现了k ...
- HDU 6194 string string string :后缀数组+单调队列 | 后缀自动机
题意:给出一个字符串,求出出现了恰好k次的子串的个数. 题解:恰好k次 = 至少k次 - 至少k+1次.答案转化为求至少出现k次的子串个数统计.构造好后缀数组以及很重要的Height数组之后.用一个k ...
- 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|] ,长度 ...
- static string java_java:String类、static关键字、Arrays类、 Math类
public voidStrMethodTest(){/** public int length () :返回此字符串的长度. * public String concat (String str) ...
- 转换ArrayList String 到String []数组[重复]
本文翻译自:Convert ArrayList to String[] array [duplicate] This question already has an answer here: 这个问题 ...
- C#中的String和string有什么区别?还有ref关键字怎么用?
String 和 string 没有区别 string 是 String 的别名 ref 关键字一般只用于函数参数中,这个参数是 struct 类型,而不是 class 类型 因为 class 类型在 ...
- shell中$后加引号有什么用($string和$'string')
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 有些时候在某些服务管理脚本中看到$"$string& ...
- 【错误记录】Kotlin 编译报错 ( Type mismatch: inferred type is String? but String was expected )
文章目录 一.报错信息 二.解决方案 一.报错信息 Google Play 上架要求 Android 的编译版本 和 目标版本都要高于 30 才可以上传 ; 将 Android 的编译版本 和 目标版 ...
- C#String与string大小写的区别
1.string是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色) 2.C# string映射为.net Framework的String 3.如果用 ...
最新文章
- 重磅:2019年全国普通高校学科竞赛排行榜出炉!
- Notification详解
- 远程研发能有多高效?手淘新版本上线只用了5天!
- XHTML、HTML4,HTML5 之间的区别
- 信息竞赛进阶指南--中缀表达式转后缀表达式并求值(模板)
- 05 | 数组:为什么很多编程语言中数组都从0开始编号?
- Win10显示此应用无法在你的电脑上运行 此应用无法在你的电脑上运行处理办法
- 一种内核到用户空间的高效数据传输技术
- 多台电脑集群运算_答疑 | 三维建模的【电脑】配置问题
- linux扩展磁盘空间命令_在Linux上监视磁盘空间– SQL Server DBA的有用命令
- php登录注册案例,php实现登陆与注册的案例
- 人工智能时代!Python跃升编程语言第一名!
- 在 Linux 平台中调试 C/C++ 内存泄漏方法
- 很有意思的HDB3编解码--C++实现
- html青蛙跳跳游戏,《小青蛙跳跳》小班游戏教案
- chm 文件的阅读、制作和反编译
- 敬业签手机版便签软件怎么绑定QQ或微信互联登录?
- NYOJ-110-剑客决斗
- Java操作Excel并显示到网页
- python爬虫requests源码链家_python爬虫爬取链家二手房信息