==数据结构==
文章平均质量分 77
你的微笑依然那样灿烂
这个作者很懒,什么都没留下…
展开
-
AC自动机算法详解
首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。AC自动机算法分为3步:构造一棵Trie树,构造失败指针和模式匹配过程。转载 2016-11-20 13:47:45 · 370 阅读 · 0 评论 -
如何搞acm
第一篇:大家都是抱着对算法与数据结构极大的兴趣才参加集训的,我们也希望大家学有所成,但是刚刚接触信息学领域的同学往往存在很多困惑,不知道从何入手学习,在这篇向导里,我希望能将自己不多的经验与大家分享,希望对各位有所帮助. 一、语言是最重要的基本功无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要过的第一道关.亚洲赛区的比赛支持的语言包括C/C++与JAVA转载 2016-11-21 18:39:44 · 373 阅读 · 0 评论 -
treap模版
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef int ll;typedef unsigned long long u原创 2017-01-16 20:28:37 · 1280 阅读 · 0 评论 -
DANCING LINKS解决重复覆盖问题
问题描述:给定一个n*m的矩阵,有些位置为1,有些位置为0。如果G[i][j]==1则说明i行可以覆盖j列。Problem:1)选定最少的行,使得每列有且仅有一个1.2)选定最少的行,使得每列至少一个1.DLX原理:这类属于NP问题的问题,可以使用搜索解决。但是普通的搜索必超时无疑。因此我们要设法加优化来加快速度。Dancing Links从数据结构方面对此类搜索进行了转载 2016-12-01 19:42:27 · 1060 阅读 · 0 评论 -
舞蹈链纯模板(kuangbin)hust1017
// main.cpp// 舞蹈链// Created by liuzhe on 16/11/30.// Copyright © 2016年 my_code. All rights reserved.#include #include #include #include #include #include #i转载 2016-11-30 15:26:29 · 608 阅读 · 0 评论 -
ac自动机模版(hdu 5384)
//// main.cpp// AC自动机//// Created by liuzhe on 16/11/16.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include #include #include #include原创 2016-11-22 12:28:41 · 290 阅读 · 0 评论 -
字典树模板
今天AC了两题trie tree的题目,感觉trie的性质真的是相当的好,而且实现比较简单。它使在字符串集合中查找某个字符串的操作的复杂度降到最大只需O(n),其中n为字符串的长度。trie是典型的将时间置换为空间的算法,好在ACM中一般对空间的要求很宽松。#include#includeusing namespace std;class trie{public:原创 2016-11-18 18:52:09 · 268 阅读 · 0 评论 -
最小生成树
最小生成树带判断连通 HDU1863也是函数直接用就行#include #include #include using namespace std;#define MIN INT_MAX#define MAX_Point 120 //最大的顶点数#define MAX_Edge 14400 //最大的边数int flag1=0;double sum ;原创 2016-11-18 18:48:56 · 278 阅读 · 0 评论 -
hdu 3911 black and white 线段树区间合并
线段树题目的类型大致可以分为四种:单点更新、成段增减或更新、区间合并和扫描线成段更新和区间合并都需要用到Lazy思想。扫描线就是求矩形面积和周长的题目,需要用到离散化。本篇讲解区间合并,区间合并肯定是从子节点向上才能用着合并,这类题目都是求最长连续区间的,主要在PushUp的时候需要对左右儿子的区间进行合并。这里就直接拿题目说事,所有的解释全部在代码的注释里。转载 2016-11-15 19:24:41 · 515 阅读 · 0 评论 -
线段树——维基百科
线段树[编辑]维基百科,自由的百科全书关于用以储存区间或线段的数据结构,详见“线段树 (储存区间)”。线段树是一种二叉树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左子树表示的区间为[a,(a+b)/2],右子树表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树。叶转载 2016-11-06 10:50:05 · 598 阅读 · 0 评论 -
HDU 5023 A Corrupt Mayor's Performance Art(线段树)
DescriptionCorrupt governors always find ways to get dirty money. Paint something, then sell the worthless painting at a high price to someone who wants to bribe him/her on an auction, this seemed原创 2016-11-11 17:15:01 · 396 阅读 · 0 评论 -
乱七八糟的树状数组和线段树
//// main.cpp// 线段树rmq//// Created by liuzhe on 16/10/29.// Copyright © 2016年 my_code. All rights reserved.///*#include #include #include using namespace std;int ma原创 2016-11-05 22:01:40 · 331 阅读 · 0 评论 -
树状数组 求逆序数 poj 2299 离散化
树状数组 求逆序数 poj 2299这里说的很好,把求逆序的步骤说的很明白,我也是看完才懂的,之前自己想了很久就是不明白为什么可以用树状数组求逆序 转载:树状数组,具体的说是 离散化+树状数组。这也是学习树状数组的第一题.算法的大体流程就是:1.先对输入的数组离散化,使得各个元素比较接近,而不是离散的,2.接着,运用树状数组的标准操作来累计数组的逆序数。算法详转载 2016-11-02 20:30:33 · 550 阅读 · 0 评论 -
数据结构专题——线段树
一:线段树基本概念1:概述线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(lgN)!性质:父亲的区间是[a,b],(c=(a+b)/2)左儿子的区间是[a,c],右儿子的区间是[c+1,b],线段树需要的空间为数组大小的四倍转载 2016-11-02 19:44:29 · 546 阅读 · 0 评论 -
POJ 3261 Milk Patterns 可重叠的k次最长重复子串
后缀数组 的入门题。先计算好SA和height数组。然后二分答案。二分的时候,对height进行分组,看存不存在一组的大小大于等于k//// main.cpp// 后缀数组//// Created by liuzhe on 17/2/5.// Copyright © 2017年 my_code. All rights reserved.//#incl原创 2017-02-07 17:20:58 · 400 阅读 · 0 评论 -
poj 2774求两个串的公共前缀 后缀数组
//// main.cpp// 后缀数组//// Created by liuzhe on 17/2/5.// Copyright © 2017年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;//poj 2774后原创 2017-02-07 17:27:38 · 549 阅读 · 0 评论 -
poj 2217
//// main.cpp// 后缀数组//// Created by liuzhe on 17/2/5.// Copyright © 2017年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;//poj 2217后原创 2017-02-07 17:29:18 · 278 阅读 · 0 评论 -
SPOJ 694&&705
题意:问一个串的子串可以有多少种,就是将重复的去掉思路:每个子串一定是某个后缀的前缀,对于某个后缀sa来说,它的最长前缀就是重复的个数,那么减去就好,而最长前缀可以通过后缀数组的sa数组线性求出//// main.cpp// 后缀数组//// Created by liuzhe on 17/2/5.// Copyright © 2017年 my_code. All原创 2017-02-08 22:24:49 · 269 阅读 · 0 评论 -
SPOJ 694&&705
题意:问一个串的子串可以有多少种,就是将重复的去掉思路:每个子串一定是某个后缀的前缀,对于某个后缀sa来说,它的最长前缀就是重复的个数,那么减去就好,而最长前缀可以通过后缀数组的sa数组线性求出//// main.cpp// 后缀数组//// Created by liuzhe on 17/2/5.// Copyright © 2017年 my_code. All right原创 2017-02-08 22:27:53 · 291 阅读 · 0 评论 -
POJ 1509 环形后缀数组
//// main.cpp// 后缀数组//// Created by liuzhe on 17/2/5.// Copyright © 2017年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;//分析是学长的/*题原创 2017-02-09 13:22:38 · 325 阅读 · 0 评论 -
hdu 1312
//// main.cpp// dfs-bfs搜索//// Created by liuzhe on 16/8/10.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include using namespace std;int w,h;char z[原创 2017-02-18 21:30:48 · 238 阅读 · 0 评论 -
LightOJ 1012
//// main.cpp// dfs-bfs搜索//// Created by liuzhe on 16/8/10.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include using namespace std;int w,h;int n;原创 2017-02-18 21:33:07 · 312 阅读 · 0 评论 -
hdu 1241
//// main.cpp// dfs-bfs搜索//// Created by liuzhe on 16/8/10.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include using namespace std;//Oil Depositsc原创 2017-02-18 21:35:07 · 220 阅读 · 0 评论 -
LightOJ1066
//// main.cpp// dfs-bfs搜索//// Created by liuzhe on 16/8/10.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;char原创 2017-02-18 21:37:09 · 378 阅读 · 0 评论 -
LightOJ 1337
#include #include #include #include using namespace std;//the crystal mazechar map[505][505];bool vis[505][505];int dir[4][2]={ {0,1}, {0,-1}, {1,0}, {-1,0}};int ans,n,m,x1[原创 2017-02-18 21:38:39 · 274 阅读 · 0 评论 -
poj 3461
#include#include#include#includeusing namespace std;const int maxn = 1000001;char text[maxn];//文本串char pattern[maxn];//模式串int nnext[maxn];//next数组.直接起next可能会跟系统中预定的重名/*O(m)的时间求next数组*/v原创 2017-02-18 21:58:57 · 409 阅读 · 0 评论 -
poj 2752
#include#includechar s[400005];int next[400005],sta[400005],all;void get_next(){ int len=strlen(s+1),i=1,j; next[1]=j=0; while(i<=len) { if(j==0||s[i]==s[j]) next[++i]=++原创 2017-02-18 21:59:55 · 242 阅读 · 0 评论 -
hdu 2087
//// main.cpp// KMP//// Created by liuzhe on 16/7/16.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;/*char t[100原创 2017-02-18 22:01:06 · 375 阅读 · 0 评论 -
poj 2406
//// main.cpp// KMP//// Created by liuzhe on 16/7/16.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;char a[10000原创 2017-02-18 22:02:27 · 236 阅读 · 0 评论 -
hdu 1711
#include#include#includeusing namespace std;int a[1000005],b[10005];int Next[10005];int n,m;int kmp(){ int i,j; j = 0; int tm = Next[0] = -1; while(j<m-1){ if(tm<0||b[j原创 2017-02-18 22:03:41 · 303 阅读 · 0 评论 -
hdu 1358
#include #include #include char str[1000005]; int next[1000005]; void getnext() { int i = 0,j = -1; memset(next,0,sizeof(next)); next[0] = -1; while (str[i原创 2017-02-18 22:04:37 · 313 阅读 · 0 评论 -
hdu 2594
//// main.cpp// KMP//// Created by liuzhe on 16/7/16.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;#define Size原创 2017-02-18 22:05:36 · 347 阅读 · 0 评论 -
hdu 3068马拉车模板题
#include #include #include #include #include using namespace std; typedef long long ll; const int inf=0x3f3f3f3f; const int maxn=110010; char str[maxn],tmp[maxn<<1]; int len1[原创 2017-02-28 16:39:57 · 376 阅读 · 0 评论 -
hdu 4513左边到中间递增的回文串
#include #include #include #include #include using namespace std; typedef long long ll; const int inf=0x3f3f3f3f; const int maxn=100010; int str[maxn],tmp[maxn<<1]; int len1[m原创 2017-02-28 16:43:41 · 302 阅读 · 0 评论 -
hdu 3294 马拉车模板题
//// main.cpp// 马拉车//// Created by liuzhe on 16/11/26.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;const int原创 2017-02-28 16:49:15 · 606 阅读 · 0 评论 -
hdu 3613马拉车
//// main.cpp// 马拉车//// Created by liuzhe on 16/11/26.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include #include #include #inclu原创 2017-02-28 16:52:30 · 446 阅读 · 0 评论 -
hdu 5371马拉车分三段
点击打开链接题意:给定一串数字,求最长的一段连续的数字,将它平均分为三段,满足第一段和第二段是回文的,第一段和第三段相等思路:第一段和第二段是回文的,那么第二段和第三段也是回文的,将数列进行Manacher,之后处理len1数组即可,做法是枚举第二段的开头和长度,当然要有限制条件,不然感觉要超时,记录最大的每段长度为ans,那么只有当len1[i]/2的值大于ans时才继续执行,然原创 2017-02-28 16:54:10 · 431 阅读 · 0 评论 -
hdu 2222AC自动机模板题
点击打开链接题意:问前面给的所有串在最后一个串出现的次数思路:这道题是AC自动机入门必做的题,所以没什么好说的,是个模版题,推荐一个大神写的算法详解,不懂得可以看一看,反正我是看他的稍稍懂了点[html] view plain copy#include stdio.h> #include string.h> #incl原创 2017-02-28 17:10:43 · 309 阅读 · 0 评论 -
hdu 5880 AC自动机
点击打开链接题意:给一些敏感词,然后下面的串只要出现敏感词就输出*思路:大家有没有kuangbin的hdu2222的模版,如果有拿过来改了不到十行的代码就过了,比网络赛的时候因为过的人比较少,都没有勇气尝试这么简单的写法,就是在每一个串的结尾标记一下最长的那个串的长度,然后输出的时候直接判断标记就行了 [html] view plain copy原创 2017-02-28 17:13:36 · 313 阅读 · 0 评论 -
hdu 2896AC自动机
//// main.cpp// AC自动机//// Created by liuzhe on 16/11/16.// Copyright © 2016年 my_code. All rights reserved.//#include #include #include #include #include using namespace std;struct T原创 2017-02-28 17:17:03 · 281 阅读 · 0 评论