
ACM之路
文章平均质量分 89
爱学习的大白菜
网络安全小学生,兴趣为流量分类,自然语言处理。
箴言:What I cannot create, I don't understand.
展开
-
【ACM之路】9.RMQ问题 (ST表)
RMQ(Range Minimum / Maximum Query)指的是“区间最值问题”即求多次查询区间最大值和最小的问题。一般常用的解决方法有:1.暴力:O(n^2)2. ST表:预处理O(nlogn), 单次查询O(1),空间O(nlogn),只能静态查询,局限性大。3. 线段树:预处理O(nlogn), 单词查询O(logn),空间O(n),可以静态和动态查询。4. LCA和RMQ:笛卡尔数,LCA(least common ancestor)是最近公共祖先Note:.原创 2020-11-01 20:43:09 · 223 阅读 · 0 评论 -
【ACM之路】8.树状数组
1.树状数组:适用于“单点更新,区间求和”或者“区间更新,单点求和”。假设有一个数组A,有两种操作,1是更新某一项的值,2是查询(l, r)区间的值,这是“单点更新,区间求和”。我们先看下面的图片。从图片可以看到,C[1] = A[1]C[2] = C[1]+ A[2] = A[1] + A[2]C[3] = A[3]C[4] = C[2] + C[3] + A[4] = A[1] + A[2] + A[3] + A[4].......有什么规律吗?...原创 2020-11-01 19:25:15 · 299 阅读 · 0 评论 -
快速幂取模的2种方法(模板)
求pow(int a, int b, int c)a^b%c1.递归写法:(时间复杂度为ln(b))如果b是奇数,则a^b = ( a ^ (b / 2) ) ^ 2 * a如果b是偶数,则a^b = ( a^(b / 2) ) ^ 2且根据定理( (a*b) % c == (a % c) * (b % c))% c )有下面...原创 2020-03-04 07:56:18 · 430 阅读 · 0 评论 -
HDU1166敌兵布阵【线段树入门训练】
一。形象理解:本题是“单点更新”的模板题。线段树几个必要函数,1.建树BuildTree, 2.更新Update , 3. 查询Query1. 建树:BuildTree(int l, int r, int k) //建立一颗从l 到 r的二叉树,k表示当前建立的点。{ T[k].l = l; T[k].r = r; if(l == r) {...原创 2020-01-27 11:06:01 · 241 阅读 · 0 评论 -
【ACM之路】1.什么时候用long long 型
1.前景介绍 在做PAT(A+B and C)时,A+B和C,给定区间[-2^31, 2^31]内的3个整数A、B和C,请判断A+B是否大于C。我首先用了int,发现溢出错误,查阅发现,int占4个字节,32位(数值范围即 -2147483648 ~ 2147483647,正负20亿内用int比较安全)如果两个负数相加(如-2147483648和-2147483648就会发生数据溢...原创 2019-04-07 14:24:55 · 5534 阅读 · 0 评论 -
【ACM之路】2.并查集
1.问题引出假设有10个强盗,请问他们一共几伙人?已知:1号强盗与2号强盗是一伙,3号强盗与4号强盗是一伙,5号2号一伙,4号6号一伙2号6号一伙,8号7号一伙,9号7号一伙,1号6号一伙,2号4号一伙,请问10个强盗一共是几伙人?2.方法思路1.首先我们先设立一个数组f[11] , 并对其初始化 , 从1号元素到10号元素,分别...原创 2019-04-12 00:38:32 · 176 阅读 · 0 评论 -
【ACM之路】3.快速幂取模
author: wuki date: 2019/4/28 subject:快速幂取模 advantage: 朴素幂需要O(n)的复杂度,而快速幂只需要O(log n),数大时速度很快。(如n = 10000,朴素幂10000次,快速幂100次就ok了。 取模 theory:(基本原理1)a^b%c = (a%c)^b%c(a的b次对c取模 = a对c取...原创 2019-04-28 09:34:29 · 350 阅读 · 0 评论 -
【ACM之路】4.最短路算法 - Floyd算法
Flody算法是一种多源最短路径算法。(即每个点到其他点之间的最短路径)1.问题引出有四个城市1,2,3,4, 8条街道(分别表明了路径长度),要求每个城市到其他城市的最短路径。用 n 代表城市个数,m 代表城市道路的个数。图片摘自《啊哈算法》,如有侵权请联系删除。2.思路引导首先我们来存储这些数据,用一个二维数组,map[105][105].(map[ i ][ j ],...原创 2019-06-18 10:39:17 · 337 阅读 · 0 评论 -
【排序算法总结】
1.简单桶排序。问: 如果给你 5 个数,其中(0<=数<=10),如何对这 5 个数进行从小到大排序。解答: 1.定一个数组 book [ 11 ] 用来存放 0 ~ 10 这 11 个数。 (book数组的大小是所有可能的数) 2.如果有这个数,则将其放入桶内 , 计数+1,即book [ i ] ++; 3.遍历所有的桶...原创 2019-06-19 11:37:08 · 178 阅读 · 0 评论 -
【ACM之路】6.最小生成树 - Kruskal算法
介绍: Kruskal算法是最小生成树算法,它适合于边少的稀疏图 。思想: 首先按照边的权值,从小到大排序,每次从剩余的边中选择 “权值最小的 且边的两个顶点不在同一个集合内的边”。 (就是不产生回路的边),加入到生成树中,直到加入了n-1条边为止。前置知识: ①. 并查集。 ②. 快速排序题目举例: 一共有6个城市...原创 2019-06-19 21:21:32 · 310 阅读 · 0 评论 -
【ACM之路】5.最短路算法-Dijkstra算法
简介:Dijkstra算法是一种单源路径算法。时间复杂度为:O(n^2).比Floyd算法(O(n^3)快很多。当然,Dijkstra算法可以用堆优化后,算法复杂度成了(O(m+n)logn),复杂度更底了。本文只讲解Dijkstra的简单算法。问题: 给予n个城市和m条道路,求从城市1到城市n的最短距离。(可见POJ2387,5个城市,5条道路)思路: ...原创 2019-06-20 18:31:20 · 646 阅读 · 0 评论 -
【ACM之路】7.搜索算法 - 深度优先搜索DFS
1.简介: 深度优先是尽可能先向深的地方搜索,若搜索不到,则回退一步向其他方向搜索,如若不能继续回退,直到搜索完毕。2.例题1(NYOJ27 水池问题,判断水池个数) 南阳理工学院有许多水池,设为1,陆地设为0,判断有几个水池,注意一个水池的上下左右若也是水池则只算一个。 比如: 1 1 ...原创 2019-06-21 10:49:14 · 288 阅读 · 0 评论 -
【HDU刷题】 2000 ~ 2099总结错误【1】【2000~2050】
HDU2015: 偶数求和: 递推,数学知识。要解决的问题:①。知道一个偶数X的情况下,m个数的序列的平均值。②。某组第一个数为X则,下一组第一个数为多少? (①。若知道某偶数为X,m个数根据等差数列求得 sum = m*X+ 2 * (m-1)*m / 2 = m*(X+ m -1) ,平均值 avg = X+ m -1.) ...原创 2019-06-26 16:58:11 · 724 阅读 · 0 评论 -
HDU1016 Prime Ring Problem【DFS+素数问题】
1.理解什么是素数,只能被1和它本身整除的数叫素数。bool isPrime(int m) //求m是不是素数{ for ( int i = 2;i<=(int)sqrt(m);i++) { if(m % i==0 ) return false; } return true;}2.DFS深度优先搜索。【比如我们要求n...原创 2019-07-20 17:12:05 · 404 阅读 · 4 评论