自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 AVL树(平衡二叉树)

AVL树是排序二叉树的优化版,多了个调整操作,排序二叉树在某些情况下可能会变的跟链表差不多,比如连续插入多个非递减的数: 这就会使得各种操作非常费时间,几乎和链表一样。但是AVL树避免了这一点,保证了任意一个节点的左右儿子节点的高度差不会超过1,这就使得AVL树的复杂度很平衡(插入删除查找log(n))。 这里的调整操作是基于两个旋转操作来进行的,即左旋和右旋: 右旋: 左旋(实际上

2016-09-29 23:33:56 442

原创 AC自动机

问题:有多个单词,然后给出一个较长的字符串,问有多少个单词出现在这个字符串里面。这里要用到的就是AC自动机,AC自动机需要KMP和字典树知识,最好把这两样都弄懂了。 AC自动机其实就是字典树里面再加一个fail指针,这个fail指针的用处就是当当前字符无法被匹配时所要进行的转移,很想KMP算法里面的next数组,比如对于单词:qwert, wert, ert所构成的字典树如下:(世上最丑作图。。丑

2016-09-25 23:13:31 572

原创 KMP算法

KMP算法是一个快速的字符串匹配算法,比如要在字符串s中判断是否存在字符串t,最最简单的算法就是暴力的搜一遍,但是暴力的复杂度太高,最坏达到了O(n*m)(n是s的长度,m是t的长度)的复杂度,在n m都较大的情况下暴力算法很耗时间。而kmp算法可以大大优化复杂度,可以达到O(n+m)的复杂度。 KMP算法的核心是求出next数组,next数组就是在进行匹配某一位置的字符时如果匹配失败的话所进行的

2016-09-23 20:19:52 342

原创 归并排序

归并排序的思想是分治,即将大问题分解成小问题然后逐一解决,该算法先将所有数分成两个两个的很多份,然后两个两个的排序,然后将两个两个的合并成四个四个的,然后再排序,然后再合并成八个八个的再排序,那么如何将n个n(n=2,4,8,16…..)个的合并呢?原理就是例如对于四个四个的合并,由于之前两个四个数的序列是有序的,那么可以在O(n)的复杂度内将两个有序的序列合并成一个有序的序列,这就是归并排序的思想

2016-09-20 21:56:27 334

原创 伸展树(splay树)

在各种各样的数据结构中,有很多树,可以查找第k大的数,比如划分树,查找区间最大值,比如线段树,但是绝大部分的树形数据结构都不能进行区间删除,但是有一种数据结构能进行区间删除,还能进行树的合并,它既是伸展树。 伸展树跟平衡树等类似,也是一颗有序的二叉树,也有左旋右旋操作,查找插入删除等操作的平均复杂度也是log(n)级别的,他的特点就是在进行在对某个数进行操作时会将这个数旋转到树根的地方,这一特点就

2016-09-19 23:28:16 491

原创 字典树(Tire树)

引:假如有n(n很大)个字符串,有q个查询,每个查询表示在这n个串里面是否存在这个要查询的串。一种方法就是直接暴力查找,但是复杂度很高,稍微优化一点的方法是先把n个串排序,然后二分查找,但复杂度仍可以优化,hash或者字典树都可以,这里介绍字典树。字典树是一颗树,每个节点都有多个子节点,子节点的数量取决于字符的范围,比如如果只有小写字母子节点就有26个就足够了,例如对于这六个字符串:ab, ada,

2016-08-30 17:45:33 521 1

原创 快速乘法 Lucas定理

一个式子a*b 对于乘数b来说,可以写成二进制形式,比如1001101。由乘法分配律:a * b = a * (b1 + b2 + b3 + ……) 那么对于a * 53 = a * 110101(二进制) = a * (100000 + 10000 + 100 + 1) = a * (100000 * 1 + 10000 * 1 + 1000 * 0 + 100 * 1 + 10 * 0 +

2016-05-22 16:41:36 397

原创 HDU 4192(中缀表达式转后缀表达式)

参考:点击打开链接一、把中缀表达式转换为后缀表达式算法的基本思路是从头到尾地扫描中缀表达式中的每个字符,对于不同类型的字符按不情况进行处理。1、先定义一个工作数组,用来存储转换之后的后缀表达式,定义一个栈,用来存储运算符。(越往栈顶优先级越高的原则)可以先定义一个‘#’优先级为0存入栈底2、扫描:若遇到的是操作数,直接存入工作数组中,若遇到运算符,将该运算符与栈顶元素比较,若该

2016-04-23 18:59:23 786

原创 POJ3070(矩阵快速幂模板)

#include #include #include #include using namespace std;const int maxn = 3;const int mod = 10000;typedef long long LL;struct node { int a[maxn][maxn]; node() { memset(a, 0, sizeof(a));

2016-04-14 15:46:43 413

原创 hdu 2665 Kth number(划分树模板)

跟线段树类似的,对于每一层的中间位置的数 把比他小的放左边,比他大的放右边#include #include #include #include #include using namespace std;const int maxn = 100000 + 7;int s[maxn];int tree[25][maxn];int toleft[25][maxn];int T,

2016-04-12 15:04:40 320

转载 康拓展开

转自这位牛:    点击打开链接康托展开:X = an * (n - 1)! + an - 1 * (n - 2)! + ...+ ai * (i - 1)! + ... + a2 * 1! + a1 * 0!ai为整数,并且0 应用实例:{1, 2, 3, 4, ..., n}的排列总共有n!种,将它们从小到大排序,怎样知道其中一种排列是有序序

2016-02-17 12:02:25 558

原创 基数排序

基数排序指的是先将个位数排序,然后再按十位数排序.....依次往后,当排到最大位的时候排序结束#include #include #include #include #include using namespace std;const int maxn = 10;int m, n, MAX, MAX_NUM;int a[50] = {0};int getnum(int x,

2015-11-11 12:02:22 411

原创 【Kafka】幂等实现

什么是幂等  幂等性是指,对于Producer生产的同一条消息,至多会被Kafka持久化一次,避免因网络重试等情况导致消息重复,例如用户下单,幂等性可以保证用户不会重复下单。  但是Kafka的幂等性只针对单会话,当一个Producer异常退出并重启后,两个会话重叠的消息是不保证幂等性的,例如,当一条消息发送完后客户端异常退出了,此时客户端并不知道这条消息已经被持久化了,那么在重启后,客户端可能仍然会重发这条消息,而Server将会认为这是一个新的生产者,此消息会被认为是一条全新的消息,此时将会出现重复

2021-11-20 17:38:06 1506

原创 windows下python+pycharm环境搭建

Python下载地址:https://www.python.org/ftp/python/3.5.4/python-3.5.4-amd64.exe 这里在C盘(哪个盘都行)根目录新建个文件夹Python35 装完之后在任意一个地方新建个txt文件,改后缀名为py,如果图标没有变成Python图标,那应该是后缀名被隐藏了然后后缀没有修改成功。 https://jingyan.bai...

2018-04-05 22:15:32 2364

原创 java中final与volatile-线程安全问题

在线程安全问题中final主要体现在安全发布问题上,在这里先讲一下什么事安全发布,在《java并发编程实践》一书中有讲,不过看起来挺难懂的…. public class Holder { private int n; public Holder(int n) { this.n = n; } public void assertSanity() {

2017-09-17 09:07:22 3936 4

原创 java多线程

有道面试题是这样考的:一个全局变量tally,两个线程并发执行(代码段都是ThreadProc),问两个线程都结束后,tally取值范围。 inttally = 0;//glable void ThreadProc() { for(int i = 1;i <= 50;i++) tally += 1; }答案是50-100,其实如果写个代码测

2017-06-11 17:26:21 423

原创 Spring入门

做一下笔记一、配置过程 准备工作: 编辑器Intellij IDEA 。tomcat新建web application,然后在WEB-INF下新建lib文件夹,将需要的jar包导入并添加到工程。 然后在src下新建dispatcher-servlet.xml,名字随便,这个将会是spring的配置文件。 配置如下:<?xml version="1.0" encoding="UTF-8"

2017-06-07 18:09:14 330

原创 HDU 5861 Road(线段树)

很暴力的写法。直接怼了三颗线段树,怕出错 思路就是先区间更新出每条路最早使用时间跟最短使用时间,然后再把这个区间维护到另一颗线段树上用于求每一天的总花费,注意当这条路自始至终都没有用到的话要特判,不然会RE#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>using namespace std;

2016-08-18 19:47:18 391

原创 POJ 3169(差分约束 + spfa模板)

题意:n头牛。按照编号排成一排,ml个第一种条件(u, v, w)表示编号为u的牛跟编号为v的牛的距离<=w,md个第二种条件(u, v, w)表示编号为u的牛跟编号为v的牛的距离>=w,如果这n头无法排成队伍,则输出-1,如果牛1和牛n的距离无限远,则输出-2,否则则输出牛1和牛n之间的最大距离。思路:差分约束,差分约束实际上就是求解多个不等式,比如 a - b <= 2 b - c <= 5

2016-07-29 12:47:26 350

原创 HDU 5754 博弈(威佐夫博弈)

这个题除了皇后的可以套用一下威佐夫博弈以外其他的都可以找规律找出来,主要为了学习一下威佐夫博弈, 威佐夫博弈:给两堆石子,每次都可以从其中一堆石子中取n个石子或者从两堆石子中都取n个石子,最后将石子取完的获胜。 解是根据: int k = abs(n - m); n = (int)((double)k * (1.0 + sqrt(5.0)) / 2.0

2016-07-26 20:22:05 489

原创 CodeForces 165D Beard Graph(树链剖分)

树链剖分偏模板题。#include #include #include #include #include #include #include using namespace std;const int maxn = 100000 + 7;const int INF = ~0U >> 1;typedef long long LL;typedef pair P;st

2016-07-20 16:26:58 454

原创 CodeForces 166B(凸包)

判断一下A所构成的凸包是不是跟总的凸包一样就可以了..#include #include #include #include #include #include #include #include using namespace std;const int INF = ~0U >> 1;const int maxn = 200000 + 7;const int

2016-07-14 13:20:16 557

原创 后缀数组小模板 POJ 2774

模板题,把俩串连起来求后缀数组,通过height数组解 当模板用咯#include #include #include #include #include const int maxn = 200000 + 7;int cmp(int *r, int a, int b, int l) { return (r[a] == r[b]) && (r[a + l] == r[b

2016-06-03 00:45:12 381

原创 HDU 3487(伸展树模板)

再也不想写第二次。题意:给一个n一个q 表示一开始有n个数 接下来q个操作 CUT a b c表示把[a, b]剪切到c处,FILP a b 将[a, b]区间翻转。伸展树搞。 看的题解:点击打开链接代码挺好理解的感觉。#include #include #include #include #include #include #define value ch[ch[ro

2016-05-03 16:50:32 384

原创 ZOJ 3195(LCA模板)

题意:给一个带权图 然后q个询问 每个询问有三个数x y z,求x y z这三个点连接起来需要多少距离。LCA 对于每个询问求出任意两个点对的LCA 加和 / 2。#include #include #include #include #include #include #include using namespace std;const int dx[] = {

2016-05-01 16:25:37 391

原创 LCA最近公共祖先问题(Tarjan离线算法)

参考:点击打开链接觉得链接处的代码有的地方好像有问题,然后自己改了改拿了过来。。问题描述:给定一个有根树,n个节点和n-1条边 以及q个查询 查询两个点的LCA  要求按输入顺序输出q个查询的答案。#include #include #include #include #include #include using namespace std;const int

2016-04-30 18:08:03 347

原创 POJ 1236(tarjan+缩点)

把所有强连通分量各缩成一个点,重新建图,ans1 = 入度为0的点的个数 ans2 = max(入度为零的点的个数,出度为0的点的个数)#include #include #include #include #include #include using namespace std;const int maxn = 100 + 7;int n, k = 0, newk = 0;

2016-04-14 17:53:54 309

原创 hdu 1402 A * B Problem Plus(快速傅里叶变换模板)

快速傅里叶变换在这里的主要用处就是可以快速求出两个多项式的乘积,可以把两个大数转换成a1 + a2*x + a3*x^2......的形式,利用FFT快速求值。#include #include #include #include #include using namespace std;const int maxn = 200000 + 7;const double PI =

2016-04-14 13:27:12 383

原创 HDU 4081 次小生成树模板题

先求最小生成树,然后对于最小生成树这个图中的所有点对,求出任意两点之间的所有路径上的最大边,注意是对于构造出来的最小生成树这个图来说。然后枚举删每一条边,求最优解。#include #include #include #include #include #include #include using namespace std;const int maxn = 10

2016-04-08 21:18:37 403

原创 POJ 3164(最小树形图模板题)

参考地址:点击打开链接最小树形图是从一个源点出发,选取一些边,使得能够从源点可以到达其他所有点,并且权和最小,即有向图的最小生成树。算法步骤:1.判断图的连通性,若不连通直接无解,否则一定有解。2.为除了根节点以外的所有点选择一个权值最小的入边,假设用pre数组记录前驱,f数组记录选择的边长,记所选边权和为temp。3.(可利用并查集)判断选择的的边是否构成环,

2016-04-08 21:10:44 361

原创 10938 - Flea circus

dfs记录路径 就行了#include #include #include #include #include #include using namespace std;const int maxn = 5000 + 7;vector G[maxn];int n, m, cnt = 0;int p[maxn], vis[maxn];bool dfs(int u, int

2016-03-05 11:18:15 360

原创 二分图匹配

二分图匹配思想说白了就是先从未匹配的点出发,到另一个未匹配的点结束,中间的点是未匹配 匹配的点交叉,即:未匹配  匹配  未匹配 匹配.........未匹配,这样每次这样的路都是未匹配的比匹配的点多一个,然后把未匹配的变成匹配的点,匹配的变成未匹配的,每次匹配的点都多一个,直到没有这样的道路为止#include #include #include #include #include

2016-03-02 22:10:43 357

原创 强连通分量模板

#include #include #include #include #include #include #include using namespace std;const int maxn = 2000 + 7;const int INF = ~0U >> 1;vector G[maxn];int n, m, k = 0, cnt = 0;int low[maxn],

2016-03-02 18:04:48 1026

原创 544 - Heavy Cargo

最大生成树#include #include #include #include #include using namespace std;const int maxn = 100 + 7;const int maxm = 19900 + 7;const int INF = ~0U >> 1;int n, m, kase = 0;int p[maxn];struct no

2016-02-21 10:05:04 324

原创 12299 RMQ with Shifts

线段树单点更新 区间查询#include #include #include #include #include using namespace std;const int maxn = 100000 + 7;const int INF = ~0U >> 1;struct node { int left, right; int val;}str[maxn*5]

2016-02-16 05:53:33 300

原创 10534 - Wavio Sequence

前后都来一遍最长上升子序列。注意要用nlogn复杂度的算法#include #include #include #include #include using namespace std;const int maxn = 10000 + 5;const int INF = ~0U >> 1;int a[maxn], dp1[maxn], dp2[maxn];int d[max

2016-02-15 09:51:25 359

转载 bellman ford最短路算法

参考地址:http://www.wutianqi.com/?p=1912#include using namespace std;const int maxnum = 100;const int maxint = 99999;// 边,typedef struct Edge { int u, v; // 起点,重点 int weight; // 边的权值}

2016-02-15 06:54:27 335

原创 伸展树(splay)模板

神级数据结构#include #include #include #include using namespace std;const int maxn = 200 + 7;int m, n;struct node { node *left, *right; node *par; int val, w;} *root;void RightRotate

2016-02-15 02:49:25 335

原创 Treap树模板

Treap包含了二叉查找树和堆的特性,而且性价比很高!#include #include #include #include #include using namespace std;const int INF = ~0U >> 1;struct node { node *left, *right; int val, fix;};struct node *ro

2016-02-14 01:31:42 357

原创 11573 - Ocean Currents

这题必须要加优先队列优化 不然会超时#include #include #include #include #include using namespace std;const int maxn = 1000 + 7;const int INF = ~0U >> 1;const int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1};const int

2016-02-10 20:22:42 462

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除