
算法学习笔记
文章平均质量分 58
神探小小迪
回头看,呀!这代码是我以前写的啊,写的是啥啊~
展开
-
快速幂【倍增+二分】
快速幂就是快速算底数的n次幂。其时间复杂度为 O(logN), 与朴素的O(N)相比效率有了极大的提高。例如11的二进制是101111 = 2³×1 + 2²×0 + 2¹×1 + 2º×1因此,我们将a¹¹转化为算常规求幂:int pow0(int a,int b){ int r=1; while(b--) r*=a; return r;} 快速求幂:int pow1(int...原创 2018-04-17 19:20:11 · 729 阅读 · 0 评论 -
Ford-Fulkerson【一般增广 路算法】
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#include <queue>#include <stack>#include <set>原创 2018-08-03 16:27:37 · 347 阅读 · 0 评论 -
HDU 3068【manacher算法】
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=3068Problem Description给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等Input输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c...y,z组成的...原创 2018-08-09 10:41:00 · 129 阅读 · 0 评论 -
点支配集、点覆盖集、点独立集
1、支配与支配集:设无向图为 G(V, E),顶点集合 V*⊆V,若对于∀v∈(V–V*),∃u∈V*,使得(u, v)∈E,则称 u 支配 v,并称 V*为 G 的一个点支配集(简称支配集)。 通俗地讲,所谓点支配集,就是 V*中的顶点能“支配”V–V*中的每个顶点,即 V–V*中的每个顶点都是 V*中某个顶点的邻接顶点,或者说 V 中的顶点要么是 V*集合中的元素、要么与 V*中的...原创 2018-08-02 10:22:23 · 3642 阅读 · 0 评论 -
边覆盖集与边独立集(匹配)
1、覆盖与边覆盖集:设无向图为 G(V, E),边的集合 E*⊆E,若对于∀v∈V,∃e∈E*,使得:v与 e 相关联,则称 e 覆盖 v,并称 E*为边覆盖集(edge covering set,或简称边覆盖)。 通俗地讲,所谓边覆盖集 E*,就是 G 中所有的顶点都是 E*中某条边的邻接顶点(边覆盖顶点)。2、极小边覆盖:若边覆盖 E*的任何真子集都不是边覆盖, 则称 E*是极小...原创 2018-08-02 11:00:39 · 2633 阅读 · 0 评论 -
匹配问题
1、完美匹配:对于一个图G与给定的一个匹配M,如果图G中不存在M的未盖点,则称匹配M为图G的的完美匹配。2、推论:设 G 中顶点个数为 n,且 G 中无孤立顶点,M 为 G 中的匹配,W 是 G中的边覆盖,则|M|≤|W|,|M|表示 M 中边的数目。当等号成立时, M 为 G 中完美匹配,W 为 G中最小边覆盖。3、二部图的完备匹配:设无向图 G(V, E)为二部图,它的两个顶点集合为 ...原创 2018-08-02 14:10:35 · 1082 阅读 · 0 评论 -
质因数分解
算术基本定理:任何一个大于 1 的整数都能唯一分解为有限个质数的乘积。试除法:结合质数质数判定的“试除法”和质数筛选的“Eratosthenes筛法”,我们可以枚举 2~sqrt(n) 中的每个数 d ,若 d 能整除 N,则从 N 中除掉所有的因子 d ,同时累计除去因子 d 的个数。因为一个合数的因子一定在扫描到这个合数之前就从 N 中被除掉了,所以在上述过程中能整除 N 的一定是质数...原创 2018-09-04 16:46:46 · 2365 阅读 · 0 评论 -
阶乘分解【分解质因数】
描述给定整数 N(1≤N≤10^6),试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 p_i 和 c_i 即可。输入格式一个整数N。输出格式N! 分解质因数后的结果,共若干行,每行一对pi, ci,表示含有pi^ci项。按照pi从小到大的顺序输出。样例输入5样例输出2 33 15 1样例解释5! = 120 = 2^3 * 3...原创 2018-09-04 20:07:17 · 5285 阅读 · 2 评论 -
约数【试除法+倍数法】
定义:若整数 n 除以整数 d 的余数为 0,即 d 能整除 n ,则称 d 是 n 的约数,n 是 d 的倍数,记为 d | n。 求 N 的正约数集合------试除法 若 d >= sqrt(n) 是 n 的约数,则 n/d <= sqrt(n)也是 n 的约数。总之,约数是成对出现的(除了完全平方数,sqrt(n) 会单独出现)。因此,只需要扫描 d...原创 2018-09-04 20:44:19 · 873 阅读 · 0 评论 -
字符串的最小表示法
定义:给定一个字符串 S[1~n] ,如果我们不断把他的最后一个字符放到开头,最终会得到 n 个字符串,称这 n 个字符串是循环同构的。 这些字符串中字典序最小的一个,称为字符串 S 的最小表示。例如 S = "abca",那么它的 4 个循环同构字符串为 "abca","aabc”,"caab","bcaa",S 的最小表示为 "aabc"。因为一个与 S 循环同构的字符串可以用该字符串在 .原创 2018-09-02 16:19:31 · 1173 阅读 · 0 评论 -
BZOJ 1257余数之和
Description给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值其中k mod i表示k除以i的余数。例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7Input输入仅一行,包含两个整数n, k。1<...原创 2018-09-05 16:19:18 · 255 阅读 · 0 评论 -
CHOJ Hankson的趣味题【最大公约数的应用】
描述Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson。现在,刚刚放学回家的Hankson正在思考一个有趣的问题。今天在课堂上,老师讲解了如何求两个正整数c1和c2的最大公约数和最小公倍数。现在Hankson认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,b0,b...原创 2018-09-05 21:43:56 · 385 阅读 · 0 评论 -
质数的筛选
问题描述:给定一个整数 N,求出 1~N 之间的所有质数,称为质数的筛选问题。Eratothenes筛法:任意整数 x 的倍数 2x,3x,...都不是质数。我们从 2 开始,由小到大扫描每个数 x,把它的倍数2x,3x,...[ N / x]*x 标记为合数。当扫描到一个数时,若它尚未标记,则它不能被 2 ~ x-1 之间的任何数整除,该数就是质数。实际上,小于 x^2 的 x 的倍数在...原创 2018-09-03 16:17:42 · 970 阅读 · 0 评论 -
POJ 3090【欧拉函数】
A lattice point (x, y) in the first quadrant (x and y are integers greater than or equal to 0), other than the origin, is visible from the origin if the line from (0, 0) to (x, y) does not pass throug...原创 2018-09-06 16:15:47 · 190 阅读 · 0 评论 -
树与图的广度优先遍历、拓扑排序
树与图的广度优先遍历:用一个队列来实现。起初,队列中仅包含一个起点,在遍历过程中,我们不断从队头取出一个节点 x ,对于 x 面对的多条分支,把沿着每条分支到达的下一个节点(如果未访问过)插入队尾,重复上述过程直至队列为空。void bfs(){ memset(d, 0, sizeof d); queue<int> q; q.push(1), d[1] =...原创 2018-09-07 11:00:59 · 1348 阅读 · 0 评论 -
ST算法
给定一个长度为N的序列A,ST算法能在 O(NlogN)时间的预处理后,以O(1)的时间复杂度在线回答“数列A中下标在 l ~ r 之间的数的最大值是多少”这样的区间最值问题。 一个序列的子区间个数显然有 O(N^2)个,根据倍增思想,我们首先在这个规模为O(N^2)的状态空间里选择一些 2 的整数次幂的位置作为代表值。 设 F[i , j] 表示...原创 2018-09-26 21:04:40 · 483 阅读 · 1 评论 -
斜抛运动的最大水平射程
1、抛出点与落地点在同一水平面:在这种情况下,当抛出角为 45度时,水平射程最大,其值为:2、抛出点与落地点不在同一水平面上:当抛出角等于 arctg(v0/vt)时,水平射程最大,其值为:v0*vt/g。其中,vt = sqrt(v0*v0+2*g*h)....原创 2018-10-05 21:49:28 · 6274 阅读 · 0 评论 -
左偏树
左偏树的定义:左偏树是一种可并堆的实现。左偏树是一棵二叉树,它的节点除了和二叉树的节点一样具有左右子树外,还有两个属性:键值和距离。节点 i 的距离(dis(i)) 是节点 i 到它的后代中,最近的外节点所经过的边数(节点i称为外节点(external node),当且仅当节点 i 的左子树或右子树为空)。特别的,如果节点 i 本身是外节点,则它的距离为0;而空节点的距离规为-1 。左偏树的性...原创 2018-10-24 21:12:34 · 577 阅读 · 0 评论 -
线性规划【单纯形算法】
• 基本变量:每个约束条件中的系数为正且只出现在一个约束条件中的变量。• 非基本变量:除基本变量外的变量全部为非基本变量。• 基本可行解:满足标准形式约束条件的可行解称为基本可行解。由此可知,如果令n−m 个非基本变量等于0,那么根据约束条 件求出m 个基本变量的值,它们组成的一组可行解为一个基本可行解。• 检验数:目标函数中非基本变量的系数。线性规划基本定理如下:• 定理1:最优解判别定理 ...原创 2018-07-15 16:55:53 · 1301 阅读 · 0 评论 -
HDU 2255 奔小康赚大钱【KM算法】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255奔小康赚大钱Problem Description传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子。这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住的话,容易引起不安定因素),每家必须分配到一间房...原创 2018-06-24 15:21:06 · 303 阅读 · 0 评论 -
RMQ模板题 poj3264 Balanced Lineup
poj3264 ST算法模板题#include <iostream>#include <cstdio>using namespace std;const int maxn = 80000;const int maxm = 30;int d_min[maxn][maxm],d_max[maxn][maxm],a[maxn];int n;void R...原创 2017-11-22 21:13:17 · 274 阅读 · 0 评论 -
最小生成树之prim算法
7-10 公路村村通(30 分)现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成...原创 2018-03-30 23:28:28 · 183 阅读 · 0 评论 -
HDU 2544最短路Dijkstra算法
最短路Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 80874 Accepted Submission(s): 35021Problem Description在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-...原创 2018-04-19 11:13:06 · 213 阅读 · 0 评论 -
HDU3790最短路径问题
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。 Input 输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。(1<n&l...原创 2018-04-19 20:34:46 · 171 阅读 · 0 评论 -
DFS【模板】找到最大岛
标题:找到最大岛标签:搜索深度优先搜索广度优先搜索详情:哼通过秘密方法得到一张不完整的钓鱼岛航拍地图。钓鱼岛由一个主岛和一些附属岛屿组成,小哼决定去钓鱼岛探险。下面这个10*10的二维矩阵就是钓鱼岛的航拍地图。图中数字表示海拔,0表示海洋,1~9都表示陆地。现在需要计算出最大岛的面积(即有多少个格子)。121000002330201210124010123201320001240000000015...原创 2018-05-08 21:10:47 · 533 阅读 · 0 评论 -
DFS【模板】 宝岛探险
标题:宝岛探险标签:搜索深度优先搜索广度优先搜索详情:小哼通过秘密方法得到一张不完整的钓鱼岛航拍地图。钓鱼岛由一个主岛和一些附属岛屿组成,小哼决定去钓鱼岛探险。下面这个10*10的二维矩阵就是钓鱼岛的航拍地图。图中数字表示海拔,0表示海洋,1~9都表示陆地。小哼的飞机将会降落在(6,8)处,现在需要计算出小哼降落所在岛的面积(即有多少个格子)。注意此处我们把与小哼降落点上下左右相链接的陆地均视为同...原创 2018-05-08 21:16:37 · 428 阅读 · 0 评论 -
HDU1285-确定比赛名次(拓扑排序)
确定比赛名次Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 32981 Accepted Submission(s): 12935Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2...原创 2018-05-03 10:41:25 · 174 阅读 · 0 评论 -
DFS【求连通块的数目】
标题:细胞标签:搜索详情:一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如阵列: 0234500067103456050020456006710000000089有4个细胞输入格式:整数m,n(m行,n列)矩阵。输出格式:细胞的个数。样例:输入4 1002345000671034560500204560067...原创 2018-05-09 20:51:17 · 1673 阅读 · 0 评论 -
P3367 【模板】并查集
题目描述如题,现在有一个并查集,你需要完成合并和查询操作。输入输出格式输入格式:第一行包含两个整数N、M,表示共有N个元素和M个操作。接下来M行,每行包含三个整数Zi、Xi、Yi当Zi=1时,将Xi与Yi所在的集合合并当Zi=2时,输出Xi与Yi是否在同一集合内,是的话输出Y;否则话输出N输出格式:如上,对于每一个Zi=2的操作,都有一行输出,每行包含一个大写字母,为Y或者N输入输出样例输入样例#...原创 2018-05-04 08:53:12 · 149 阅读 · 0 评论 -
P3383 【模板】线性筛素数
题目描述如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内)输入输出格式输入格式:第一行包含两个正整数N、M,分别表示查询的范围和查询的个数。接下来M行每行包含一个不小于1且不大于N的整数,即询问该数是否为质数。输出格式:输出包含M行,每行为Yes或No,即依次为每一个询问的结果。输入输出样例输入样例#1:复制100 52349197输出样例#1:复制Y...原创 2018-05-04 09:12:15 · 120 阅读 · 0 评论 -
P1059 明明的随机数(桶排序)
题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。输入输出格式输入格式:输入有2行,第1行为1个正整数,表示所生成的随机数的个数N第...原创 2018-05-04 21:06:50 · 433 阅读 · 0 评论 -
快速排序【模板】
标题:小哼买书标签:字符串模拟排序字符串处理详情:小哼的学校要建立一个图书角,老师派小哼去找一些同学做调查,看看同学们都喜欢读哪些书。小哼让每个同学写出一个自己最想读的书的ISBN号(你知道吗?每本书都有唯一的ISBN号,不信话你去找本书翻到背面看看)。当然有一些好书会有很多同学都喜欢,这样就会收集到很多重复的ISBN号。小哼需要去掉其中重复的ISBN号,即每个ISBN号只保留一个,也就说同样的书...原创 2018-05-08 11:53:25 · 377 阅读 · 1 评论 -
P1781 宇宙总统
题目背景宇宙总统竞选题目描述地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。输入输出格式输入格式:president.in第一行为一个整数n,代表竞选总统的人数。接下来有n行,分别为第一个候选人到第n个候选人的票数。输出格式:president.out共两行,第一行是一个整数m,为当上总统的人的号数。第二行是当上...原创 2018-05-08 16:20:52 · 1261 阅读 · 0 评论 -
P1330 封锁阳光大学【二分染色】
题目描述曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街。河蟹看到欢快的曹,感到不爽。河蟹决定封锁阳光大学,不让曹刷街。阳光大学的校园是一张由N个点构成的无向图,N个点之间由M条道路连接。每只河蟹可以对一个点进行封锁,当某个点被封锁后,与这个点相连的道路就被封锁了,曹就无法在与这些道路上刷街了。非常悲剧的一点是,河蟹是一种不和谐的生物,当两只河蟹封锁了相邻的两个点时,他们会发生...原创 2018-05-23 17:25:40 · 292 阅读 · 0 评论 -
51nod 1072【威佐夫游戏】
有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比赛。例如:2堆石子分别为3颗和5颗。那么不论A怎样拿,B都有对应的方法拿到最后1颗。Input第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 100...原创 2018-06-13 22:36:05 · 182 阅读 · 0 评论 -
51nod【1006 最长公共子序列Lcs 】
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。比如两个串为:abcicbaabdkscabab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。Input第1行:字符串A第2行:字符串B(A,B的长度 <= 1000)Output输出最长的子序列,如果有多个,随意输出1个。Input示例abcicbaabdkscabOutpu...原创 2018-06-07 18:09:43 · 210 阅读 · 0 评论 -
匈牙利算法【模板】
代码:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <vector>#include <set>#include <map>原创 2018-06-23 16:43:06 · 635 阅读 · 0 评论 -
背包问题模板
1.01背包问题有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。/*f[j]表示背包容量最大为 j 时的最大价值*/#include <iostream>#include <cstring>#include ...原创 2019-03-17 17:21:06 · 224 阅读 · 0 评论