摘要:
二分与三分 一:二分 在一个单调有限的区间上找一个值,每一次分左右两部分,判断是在左右哪两个区间,并及时调整上下界,直至找到了目标元素,就如他的名字一样,二分,不断把数据分成两半 但是对于解决实数类的问题,通常需要一个精确值,避免死循环 二:二分写法 1.整数定义域上的二分: 1 bool Chec 阅读全文
摘要:
NOIP应试技巧 1.考前准备:必备物品:身份证,水,卫生纸,表,眼镜可以适当带一点食物。 把总结浏览一遍,常用代码再看一遍,注意细节。 2.考试心态:不用想太多,做下去就行,你就是第一! 3.考试放松技巧:怒敲键盘、喝水、上厕所洗脸等。 4.到机房之后的准备工作: 5.做题技巧: A.看准考证上说 阅读全文
摘要:
数论 第一节:快速乘法 ll CF(ll a,ll b,ll p) { a%=p,b%=p; ll ans=0; do{ if(a&1) (ans+=b)%=p; (b*=2)%=p; }while(a>>=1); return ans; } 第二节:快速幂 int Pow(int a,int b) 阅读全文
摘要:
最短路 一、求出最短路径的长度 以下没有特别说明的话,dis[u][v]表示从u到v最短路径长度,w[u][v]表示连接u,v的边的长度。 1.Floyed-Warshall算法 O(N3) 简称Floyed(弗洛伊德)算法,是最简单的最短路径算法,可以计算图中任意两点间的最短路径。Floyed的时 阅读全文
摘要:
并差集 在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内竞赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往 阅读全文
摘要:
图的遍历 一、深度优先与广度优先遍历 从图中某一顶点出发系统地访问图中所有顶点,使每个顶点恰好被访问一次,这种运算操作被称为图的遍历。为了避免重复访问某个顶点,可以设一个标志数组visited[i],未访问时值为false,访问一次后就改为true。 图的遍历分为深度优先遍历和广度优先遍历两种方法, 阅读全文
摘要:
图 一、什么是图? 很简单,点用边连起来就叫做图,严格意义上讲,图是一种数据结构,定义为:graph=(V,E)。V是一个非空有限集合,代表顶点(结点),E代表边的集合。 二、图的一些定义和概念 (a)有向图:图的边有方向,只能按箭头方向从一点到另一点。(a)就是一个有向图。 (b)无向图:图的边没 阅读全文
摘要:
最小生成树 一、什么是图的最小生成树(MST)? 不知道大家还记不记得树的一个定理:N个点用N-1条边连接成一个连通块,形成的图形只可能是树,没有别的可能。 一个有N个点的图,边一定是大于等于N-1条的。图的最小生成树,就是在这些边中选择N-1条出来,连接所有的N个点。这N-1条边的边权之和是所有方 阅读全文
摘要:
树状数组 int lowbit(int x) { return x&(-x); } void update(int x,int y) 单点修改 { while(x<=n) c[x]+=y,x+=lowbit(x); } int sum(int x) 区间求和 { int res=0; while(x 阅读全文
摘要:
线段树 一、引入 在做题时经常会遇到需要我们维护一个序列的问题,例如给定一个整数序列,每次操作会修改序列某个位置上的数,或是询问你序列中某个区间内所有数的和。考虑到暴力算法,单点修改的复杂度为O(1),询问区间和的单次复杂度为O(区间长度),考虑到利用前缀和,询问单次为O(1),但单点修改为O(区间 阅读全文
摘要:
Tree Node节点 root树根 degree度 leaf 树叶 level层次 depth深度 forest森林 BT二叉树 树是一种非线性的数据结构,用它能很好地描述有分支和层次特性的数据集合。树型结构在现实世界中广泛存在,如社会组织机构的组织关系图就可以用树型结构来表示。树在计算机领域中也 阅读全文
摘要:
BT 二叉树基本概念 二叉树(binary tree,简写成BT)是一种特殊的树型结构,它的度数为2的树。即二叉树的每个结点最多有两个子结点。每个结点的子结点分别称为左孩子、右孩子,它的两棵子树分别称为左子树、右子树。二叉树有5中基本形态: 前面引入的树的术语也基本适用于二叉树,但二叉树与树也有很多 阅读全文
摘要:
队列 队列是限定在一端进行插入,另一端进行删除特殊线性表。就像排队买东西,排在前面的人买完东西后离开队伍(删除),而后来的人总是排在队伍未尾(插入)。通常把队列的删除和插入分别称为出队和入队。允许出队的一端称为队头,允许入队的一端称为队尾。所有需要进队的数据项,只能从队尾进入,队列中的数据项只能从队 阅读全文
摘要:
栈 栈是只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往上堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。 栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP) 阅读全文
摘要:
背包问题 一、01背包问题 【问题】: 有N件物品和一个容量为V的背包。第i件物品的费用(即体积,下同)是w[i],价值是c[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路: 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定 阅读全文
摘要:
动态规划的基本模型 动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不像前面所述的那些搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同 阅读全文
摘要:
广搜 第一节:广度优先搜索的过程 广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。 广度优先算法的核心思想是:从初始节点开始,应用算符生成第一层节点,检查目 阅读全文
摘要:
贪心 一、基本概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备 阅读全文
摘要:
第七章 分治 所谓分治就是指的分而治之,即将较大规模的问题分解成几个较小规模的问题,通过对较小规模问题的求解达到对整个问题的求解。当我们将问题分解成两个较小问题求解时的分治方法称之为二分法。 你们玩过猜数字的游戏吗?你的朋友心里想一个1000以内的正整数,你可以给出一个数字x,你朋友只要回答“比x大 阅读全文
摘要:
深搜 搜索与回溯是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,可以利用搜索与回溯的技术求解。回溯是搜索算法中的一种控制策略。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行, 阅读全文