首先我们先来从一个小游戏理解一下二分.(摘自程序员小灰的博客) 为什么说这样效率最高呢?因为每一次选择数字,无论偏大还是偏小,都可以让剩下的选择范围缩小一半. 给定范围0到1000的整数: 第一次我们选择500,发现偏大了,那么下一次的选择范围,就变成了1到499: 第二次我们选择250,发现还是偏大了,那么下一次的选择范围,就变成了1到249: 第三次我们选择125,发现偏小了,那么下一次的选择范围,就变成了126到249: 以此类推,最坏的情况需要猜测多少次呢?答案是 log1000 = 1…
定义 DFS(Depth-First-Search)深度优先搜索算法,是搜索算法的一种. 接下来因为懒得去找大段大段深奥的材料 所以就是一些个人的理解. 所谓深搜,是相对于广搜(只是第一篇)来说的.深搜根据名字都知道,我们是将搜索的深度放在首位,而不是别的(比如广度). 什么意思呢?还是同样一个图给大家理解一下. 像这样一个无向图中: 按照广搜的思想,搜索顺序为: 1→2→3→4→5→6→7→8(按照层数依次往下) 按照深搜的思想,搜索顺序为: 1→2→5→6→8→3→4→7(一个分支搜完再继续…
[总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $              X_2 + 2X_3 = 1$ $2X_1 + X_3 = 0$ 化为矩阵为:--->----->-----> 然后就可以通过最后一行直接求出$X_3 = ...$,将其带回第二行,算出$X_2$,同理算出$X_1$. 代码很好理解: inline void gauss(){ int…
二分答案法例题,用于练习二分答案的基本思想非常合适,包括了思维方式转换的内容(以前我们所做的一直是利用二分法求得数组元素对应指针之类,但是现在是直接对答案进行枚举). 思路是:首先对输入数组进行排序,使得a,b两数组都相对有序. 接下来对每个数字进行二分枚举,之后,通过判断这个数组当前的排名来进行下一步的二分. 对于每个数字排名的方式通过对枚举每一个a数组中的位置来确定,之后二分对应的数组元素的位置得到,时间复杂度是NLOGN: 整个算法时间复杂度是NLOGNLOG(N*N)带入50000计算得…
题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入格式 第一行,两个整数,A,B.(B<=A<=100000) 第二行,A个整数,分别为这A个瓶盖坐标. 输出格式 仅一个整数,为所求答案. 一道练习二分的经典例题 #include<iostream> #include<cstdio> #include<algorithm…
在一个列表当中我们可以进行线性查找也可以进行二分查找,即通过不同的方法找到我们想要的数字,线性查找即按照数字从列表里一个一个从左向右查找,找到之后程序停下.而二分查找的效率往往会比线性查找更高. 一.二分查找的步骤 二分查找的步骤首先是将列表进行升序或者降序排列,否则无法进行数字的比较,也就无法进行二分查找.然后找到一个列表的中间数值(mid),如果列表当中的数字和为基数,则为最中间的那个数.如果为偶数,则为最中间的那两个数的左边那一个,比如说我们有一个列表,[1,2,3,4,5,6],列表当中…
Link 整体二分的经典例题. 对于整体二分,我个人的理解是二分答案套分治. 具体来说就是对答案进行二分,然后对于询问进行类似于权值线段树求区间第 \(k\) 大的分治做法. 首先,我们暴力做法就是对每个询问都跑一边二分答案,这样的复杂度是 O(\(nm log n\)) 这显然我们是不能够接受的. 我们发现我们二分答案处理每个询问时,会重复计算好多遍加权的操作. 我们就考虑把询问放在一起处理,每个加权操作只重复计算一次. 这样就能省去不少时间.具体怎么实现呢? 假设,我们二分出来的答案为 \(…
差分数组 定义 百度百科中的差分定义 //其实这完全和要讲的没关系 qwq 进去看了之后是不是觉得看不懂? 那我简单概括一下qwq 差分数组de定义:记录当前位置的数与上一位置的数的差值. 栗子 容易发现的是,\(\sum_{j=1}^{i} b_j\)即代表\(a_i\) 的值. \((\sum\) 即代表累加.) 思想 看到前面的\(\sum\) 你一定会发现这是前缀和! 那你认为这是前缀和? 的确是qwq. 实际上这并不是真正意义上的前缀和. 前缀和的思想是 根据元素与元素之间的并集关系(…
先看看sizeof() 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类型名.操作数的存储大小由操作数的类型决定.其实可以简单的理解sizeof是征对"类型"的. 二.sizeof的使用方法 1.用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住.如sizeof(int). 2.用于变量 sizeof…
先看看sizeof() 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类型名.操作数的存储大小由操作数的类型决定.其实可以简单的理解sizeof是征对"类型"的. 二.sizeof的使用方法 1.用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住.如sizeof(int). sizeof作用范围内,也…