![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法~~
Hengzuzong
我本微末凡尘,但也心向天空。
展开
-
快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序,...原创 2018-10-23 17:42:21 · 130 阅读 · 0 评论 -
DFS序详解
给定一棵n个节点的树,m次查询,每次查询需要求出某个节点深度为h的所有子节点。对于这个问题如果试图去对每个节点保存所有深度的子节点,在数据大的时候内存会吃不消;或者每次查询的时候去遍历一遍,当数据大的时候,时间效率会非常低。此时如果使用dfs序维护树结构就可以轻松地解决这个问题。作为预处理,首先将将树的所有节点按深度保存起来,每个深度的所有节点用一个线性结构保存,每个深度的节点相对顺序...原创 2018-08-21 16:05:21 · 607 阅读 · 0 评论 -
数据离散化处理
一、概述数据离散化是一个非常重要的思想。为什么要离散化?当以权值为下标的时候,有时候值太大,存不下。 所以把要离散化的每一个数组里面的数映射到另一个值小一点的数组里面去。打个比方,某个题目告诉你有10^4个数,每个数大小不超过10^10,要你对这些数进行操作,那么肯定不能直接开10^10大小的数组,但是10^4的范围就完全没问题。我们来看一下定义:离散化,把无限空间中有限的个体映射...原创 2018-08-21 15:22:36 · 11033 阅读 · 1 评论 -
HDU - 1285 确定比赛名次 (拓扑排序)
有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 Input输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中...原创 2018-08-24 11:21:55 · 207 阅读 · 0 评论 -
拓扑排序~~(入门)
1、拓扑排序的介绍对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。 拓扑排序对应施工的流程图具有特别重要的作用,它可以决定哪些子工程必须要先执行,哪些子工程要在某些工程执行后才可以执行。为了形象地反映出整个工程中各个子工程(活动)之间...原创 2018-08-24 10:26:10 · 191 阅读 · 0 评论 -
Poj~1200 Crazy Search (Hash哈希算法)
Many people like to solve hard puzzles some of which may lead them to madness. One such puzzle could be finding a hidden prime number in a given text. Such number could be the number of different subs...原创 2018-08-17 16:13:24 · 244 阅读 · 0 评论 -
最小生成树~~prim算法和kruskal算法~~模板
1、什么是最小生成树现在假设有一个很实际的问题:我们要在n个城市中建立一个通信网络,则连通这n个城市需要布置n-1一条通信线路,这个时候我们需要考虑如何在成本最低的情况下建立这个通信网? 于是我们就可以引入连通图来解决我们遇到的问题,n个城市就是图上的n个顶点,然后,边表示两个城市的通信线路,每条边上的权重就是我们搭建这条线路所需要的成本,所以现在我们有n个顶点的连通网可以建立不同的生成树,...原创 2018-08-16 17:37:39 · 655 阅读 · 0 评论 -
HDU~2087~剪花布条
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。 Outpu...原创 2018-08-18 20:37:55 · 130 阅读 · 0 评论 -
HDU--1711Number Sequence (KMP)
Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make a[K] = b[1], a[K ...原创 2018-08-18 20:34:15 · 105 阅读 · 0 评论 -
算法题~~聪明的木匠
一位老木匠需要将一根长的木棒切成N段。每段的长度分别为L1,L2,......,LN(1 <= L1,L2,…,LN <= 1000,且均为整数)个长度单位。我们认为切割时仅在整数点处切且没有木材损失。木匠发现,每一次切割花费的体力与该木棒的长度成正比,不妨设切割长度为1的木棒花费1单位体力。例如:若N=3,L1 = 3,L2 = 4,L3 = 5,则木棒原长为12,木匠可以有多种切...原创 2018-09-07 22:38:52 · 482 阅读 · 0 评论 -
霍夫曼编码(Huffman Coding
霍夫曼编码(Huffman Coding)是一种编码方法,霍夫曼编码是可变字长编码(VLC)的一种。霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。霍夫曼编码的具体步骤如下:...原创 2018-09-07 22:43:16 · 1561 阅读 · 0 评论 -
P1328 生活大爆炸版石头剪刀布 (继续水)
石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一 样,则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。蜥蜴人:《星际迷航》中的反面角色。这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。现在,小 A和小 B尝试玩这种升...原创 2018-10-09 21:45:03 · 136 阅读 · 0 评论 -
STL容器(vtecor,map,set,stack,queue) 基础运用 ~c++
1.MapMap是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边...原创 2018-09-10 11:21:00 · 179 阅读 · 0 评论 -
P1478~陶陶摘苹果(升级版)
题目描述又是一年秋季时,陶陶家的苹果树结了n个果子。陶陶又跑去摘苹果,这次她有一个a公分的椅子。当他手够不着时,他会站到椅子上再试试。这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力气只剩下s了。当然,每次摘苹果时都要用一定的力气。陶陶想知道在s<0之前最多能摘到多少个苹果。现在已知n个苹果到达地上的高度xi,椅子的高度a,陶陶手伸直的最大长度b,陶陶所剩的力气s,...原创 2018-09-06 15:58:14 · 211 阅读 · 0 评论 -
扩展欧几里德算法 求解不定方程的通解~~
扩展欧几里德算法是用来在已知a, b求解一组p,q使得p * a+q * b = Gcd(p, q) (解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。下面是一个使用C++的实现: int exGcd(int a, int b, int &x, int &y) { if(b == 0) { x = 1; y = 0; re...原创 2018-07-24 14:22:19 · 2076 阅读 · 0 评论 -
快速排斥实验和跨立实验
矢量 如果一条线段的端点是有次序之分的话,那么这种线段就称为 有向线段,如果有向线段p1p2的起点p1在坐标的原点,则可以把它称为矢量p2矢量的加减 设二维矢量 P = (x1, y1), Q = (x2, y2),则 P + Q = (x1 + x2, y1 + y2), P -Q = (x1 - x2, y1 - y2),且有 P + Q = Q + P, P - ...原创 2018-07-26 09:59:19 · 805 阅读 · 0 评论 -
51nod~~独木舟问题
输入第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重。接下来n行,每行一个正整数,表示每个人的体重。体重不超过1000000000,并且每个人的体重不超过m。输出一行一个整数表示最少需要的独木舟数。输入示例3 6123输出示例2解析: ...原创 2018-09-03 21:01:54 · 158 阅读 · 0 评论 -
洛谷P1149~火柴棒等式
题目描述给你n根火柴棍,你可以拼出多少个形如“A+B=CA+B=C”的等式?等式中的AA、BB、CC是用火柴棍拼出的整数(若该数非零,则最高位不能是00)。用火柴棍拼数字0-90−9的拼法如图所示:注意: 加号与等号各自需要两根火柴棍 如果A≠BA≠B,则A+B=CA+B=C与B+A=CB+A=C视为不同的等式(A,B,C>=0A,B,C>=0) ...原创 2018-09-05 19:58:08 · 485 阅读 · 0 评论 -
UVA~156(map)
Sample input ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Rides dealer NotE derail LaCeS drIed noel dire Disk mace Rob dries # Sample output...原创 2018-09-08 13:08:38 · 145 阅读 · 0 评论 -
贪心入门~~51nod活动安排问题
输入第1行:1个数N,线段的数量(2 <= N <= 10000)第2 - N + 1行:每行2个数,线段的起点和终点(-10^9 <= S,E <= 10^9)输出输出最多可以选择的线段数量。输入示例31 52 33 6输出示例2这个很明显是一个贪心算法,也可以说是很模板的题了,代码如下:#include&...原创 2018-09-02 22:52:52 · 181 阅读 · 0 评论 -
KMP~~算法+HDU1686
KMP算法主要应用于字符串的匹配。对于正常的字符串模式匹配,主串长度为m,子串为n,时间复杂度会到达O(m*n),而如果用KMP算法,复杂度将会减少线型时间O(m+n)。 设主串为ptr="ababaaababaa";,要比较的子串为a=“aab”; KMP算法用到了next数组,然后利用next数组的值来提高匹配速度,我首先讲一下next数组怎么求,之后再讲匹配方式。 ...原创 2018-08-18 15:48:06 · 181 阅读 · 0 评论 -
并查集~~HDU1232&1233
开始还是让我们了解了解什么是并查集!定义:并查集是一种树型的数据结构,用于处理一些不相交集(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并。。在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间...原创 2018-08-15 11:24:47 · 178 阅读 · 0 评论 -
51nod ~~1091(贪心算法)
X轴上有N条线段,每条线段包括1个起点和终点。线段的重叠是这样来算的,10201020和12251225的重叠部分为12201220。给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长的。输出这个最长的距离。如果没有重叠,输出0。Input第1行:线段的数量N(2 <= N <= 50000)。 第2 - N + 1行:每行2个数,线段的起点和终点。(...原创 2018-08-02 17:08:12 · 139 阅读 · 0 评论 -
HDU-1285~~确定比赛名次 (拓扑排序)
有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 Input输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中...原创 2018-08-05 10:45:50 · 98 阅读 · 0 评论 -
POJ-2631 ~~Roads in the North
Building and maintaining roads among communities in the far North is an expensive business. With this in mind, the roads are build such that there is only one route from a village to a village that do...原创 2018-08-05 10:43:31 · 165 阅读 · 0 评论 -
51nod~矩阵求数问题 ~~动态规划入门
给定一个m行n列的矩阵,矩阵每个元素是一个正整数,你现在在左上角(第一行第一列),你需要走到右下角(第m行,第n列),每次只能朝右或者下走到相邻的位置,不能走出矩阵。走过的数的总和作为你的得分,求最大的得分。 这也只是一个例题输入第1行:N,N为矩阵的大小。(2 <= N <= 500)第2 - N + 1行:每行N个数,中间用空格隔开,对应格子中奖励的价...原创 2018-08-09 14:21:31 · 256 阅读 · 0 评论 -
优先队列~~
优先队列引入优先队列是一种特殊的队列,在学习堆排序的时候就有所了解,点“击”查看。那么优先队列是什么呢? 说白了,就是一种功能强大的队列。如果不太清楚队列,可以看看我这篇博客。它的功能强大在哪里呢? 四个字:自动排序。优先队列的头文件&&声明首先,你需要 这两个头文件。其次,一个优先队列声明的基本格式是: priority_queue<结...原创 2018-07-27 10:03:53 · 93 阅读 · 0 评论 -
栈和队列
1.栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。使用栈,要先包含头文件 : #include<stack>定...原创 2018-07-27 09:14:47 · 108 阅读 · 0 评论 -
凸包~~Andrew算法
凸包——Andrew(安德鲁)算法2014年07月12日 17:37:20阅读数:1439凸包(ConvexHull)就是把给定点包围在内部的,面积最小的凸多边形。原理:首先把所有点按照从小到大排序(如果x相同,按照y从小到大排序),删除重复点后得到序列p1; p2; :::,然后把p1和p2放到凸包中。从p3开始,当新点在凸包“前进”方向的左边时继续,否则依次删除最近加入凸...原创 2018-07-26 17:51:55 · 524 阅读 · 0 评论 -
Pick公式 ~~pick算法
Pick定理:设以整数点为顶点的多边形的面积为S,多边形内部的整数点数为N,边界上的整数点数为L,则N+1/2*L-1=S;下面给出计算N,L,S的程序。typedef struct Point{ int x,y;}point; int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);} int On...原创 2018-07-26 16:45:08 · 1036 阅读 · 0 评论 -
求多边形面积
计算任意多边形的面积对于凸多边形,很容易计算,如下图,以多边形的某一点为顶点,将其划分成几个三角形,计算这些三角形的面积,然后加起来即可。已知三角形顶点坐标,三角形面积可以利用向量的叉乘来计算。 对于凹多边形,如果还是按照上述方法划分成三角形,如下图,多边形的面积 = S_ABC + S_ACD + S_ADE, 这个面积明显超过多边形的面积。 我们根据二维向量叉乘求三...原创 2018-07-26 15:31:40 · 1215 阅读 · 0 评论 -
欧几里德算法~~
原文:http://blog.csdn.net/leader_one/article/details/75222771;觉得大佬写的不错,防止忘记,备份一篇说在前面出于尊重,简单介绍一下欧几里得(想了解更多自己百度去) 欧几里得(希腊文:Ευκλειδης ,公元前330年—公元前275年),古希腊数学家。他活跃于托勒密一世(公元前364年-公元前283年)时期的亚历山大里亚,被称为...原创 2018-07-24 11:25:56 · 229 阅读 · 0 评论 -
LCS~~最长公共子序列(动态规划)
A和B的公共子序列中长度最长的(包含元素最多的)叫做A和B的公共子序列。仍然用序列1,3,5,4,2,6,8,7和序列1,4,8,6,7,5它们的最长公共子序列是:1,4,8,71,4,6,7 最长公共子序列的长度是4 。请注意: 最长公共子序列不唯一。我们用Ax表示序列A的连续前x项构成的子序列,即Ax= a1,a2,……ax, By= b1,b2,……by, 我们用...原创 2018-08-09 16:39:49 · 185 阅读 · 0 评论 -
广度优先搜索 BFS~~
1.宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。2.它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。来自https://blog.csdn.net/a747979985/article/details/519857321.前言广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略。...原创 2018-07-31 20:37:10 · 114 阅读 · 0 评论 -
HDU 6025~~ Coprime Sequence
Do you know what is called ``Coprime Sequence''? That is a sequence consists of nnpositive integers, and the GCD (Greatest Common Divisor) of them is equal to 1. ``Coprime Sequence'' is easy to find ...原创 2018-08-02 17:05:47 · 234 阅读 · 0 评论 -
矩阵取数问题dp~51Nod1084+1083
先看第一个比较简单的问题:一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。例如:3 * 3的方格。 1 3 32 1 32 2 1 能够获得的最大价值为:11。Input第1行:N,N为矩阵的大小。(2 <= N <= 500) 第2 - N + 1行:每行N个数,中间...原创 2018-08-11 15:53:10 · 181 阅读 · 0 评论 -
疯狂的母牛~~
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?Input输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。Output对于每个测试实例,输出在第n年的时候母牛的数量。 每个输出占一行。Sam...原创 2018-08-02 10:55:12 · 158 阅读 · 0 评论 -
HDU(oj)~~1995 汉诺塔
用1,2,...,n表示n个盘子,称为1号盘,2号盘,...。号数大盘子就大。经典的汉诺塔问 题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于 印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小 顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱 子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子...原创 2018-08-02 10:50:08 · 640 阅读 · 0 评论 -
HDU 2266-------How Many Equations Can You Find~~
Now give you an string which only contains 0, 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9.You are asked to add the sign ‘+’ or ’-’ between the characters. Just like give you a string “12345”, you can work out a string ...原创 2018-08-01 16:46:27 · 99 阅读 · 0 评论 -
放苹果 ~~ac
题目描述:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。Input第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。Output对输入的每组数据M和N,用一行输出相应的K。Sample Input...原创 2018-08-01 15:12:43 · 93 阅读 · 0 评论