随笔分类 -  算法

摘要:飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员。由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多。 因为驾驶工作分工严格,两个正驾驶员或两个副驾驶员都不能同机飞行。 输入格式: 阅读全文
posted @ 2022-02-06 23:25 empty_thought 阅读(118) 评论(0) 推荐(0)
摘要:题目描述 给一棵有根树,以及一些询问,每次询问树上的2 个节点A、B,求它们的最近公共祖先. 输入 第一行一个整数N.接下来N 个数,第i 个数Fi 表示i 的父亲是Fi. 若Fi = 0,则i 为树根. 接下来一个整数M.接下来M 行,每行2 个整数A、B,询问节点(A xor LastAns)、 阅读全文
posted @ 2022-02-05 17:43 empty_thought 阅读(41) 评论(0) 推荐(0)
摘要:题目描述 给出一个长为n的数列,以及n个操作,操作涉及区间加法,询问区间内小于某个值x的元素个数。 输入 第一行输入一个数字n。 第二行输入n个数字,第i个数字为a,以空格隔开。 接下来输入n行询问,每行输入四个数字opt、l、 r、c,以空格隔开。若opt =0,表示将位于[l,r]的之间的数字都 阅读全文
posted @ 2022-01-22 23:12 empty_thought 阅读(69) 评论(0) 推荐(0)
摘要:[树状数组]校门外的树 题目描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的…… 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K =1,读入 l , r 表示在 l ~ r 之间种上的一种树 K =2,读入 l , r 表 阅读全文
posted @ 2022-01-21 22:59 empty_thought 阅读(111) 评论(0) 推荐(0)
摘要:P1003: A Simple Problem with Integers 题目描述 You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation 阅读全文
posted @ 2022-01-21 22:52 empty_thought 阅读(45) 评论(0) 推荐(0)
摘要:题目描述 HF市地下有一份宝藏,数不清的黄金、钻石……。令人遗憾的是,千年来未曾有人得到过这份宝藏。其中一个主要原因就是,要得到这份宝藏之前,首先需要通过一个迷宫。 这个迷宫的结构非常复杂,一共有N个秘密房间。广为流传的一种说法是,必须在1天之内将这N个房间的门全部打开,才能找到迷宫的出口,否则就会 阅读全文
posted @ 2022-01-17 20:30 empty_thought 阅读(66) 评论(0) 推荐(0)
摘要:卡特兰数可解决如下问题: 出栈次序。一个栈的进栈序列为1,2,3,4,5...,n,有多少种出栈序列。 n对括号有多少种匹配方式。 n个矩阵连乘,由于结合律,有多少种括号化的计算方案。 n个结点构成二叉树有多少种构造方案。 圆上有2n个点,两两连成线段,且线段互不相交,有多少种方案。 一个凸多边形划 阅读全文
posted @ 2021-10-28 11:30 empty_thought 阅读(90) 评论(0) 推荐(0)
摘要:本原勾股数 a,b,c没有公因子 可从奇偶性的角度推断有几种组合 奇偶奇与奇奇偶 其中不难证明奇奇偶是不可能的,因为奇奇平方和是2的倍数,偶的平方和是4的倍数 本原勾股数只可能是一种组合,假设a是奇数,b是偶数,c是奇数 c-b、c+b都是平方数 假设d=gcd(b,c) d|c-b d|c+b ⇒ 阅读全文
posted @ 2021-10-24 15:05 empty_thought 阅读(358) 评论(0) 推荐(0)
摘要:动态规划一般有三步,定义子问题,这个子问题有着最优子结构,如果选取不合适可能无法解题;分析最优解的特点找到当前问题的最优解与最优子结构的关系,利用已经解决的子问题解决更大的问题,通常是最难的;初始化,极端情况的赋值,一般比较简单。 1、二项式系数计算问题 二项式系数用阶乘计算,也可采用杨辉三角加法解 阅读全文
posted @ 2021-10-21 21:09 empty_thought 阅读(168) 评论(0) 推荐(0)
摘要:#include<stdio.h> #define MAXSIZE 1<<10 int ChessBoard[MAXSIZE][MAXSIZE]; void BoardCover(int tr, int tc, int dr, int dc, int size) { static int Tag = 阅读全文
posted @ 2021-10-06 17:23 empty_thought 阅读(75) 评论(0) 推荐(0)
摘要:最大流问题是给一个有向网络,每条边都有一个容量,问从起点到终点最多能输出多少流。 这是一个模型,在处理某些问题合适建模,就能利用这些现成的算法,使得问题得到解决。 EK算法采用BFS找增广路,不断用流到这个点的最大流和现存容量的较小值进行更新,就这样每次找到一条更新整个图,然后添加反向弧,反向弧的容 阅读全文
posted @ 2021-10-05 21:29 empty_thought 阅读(222) 评论(0) 推荐(0)
摘要:输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数x1, y1, x2, y2, c,其中(x1, y1)和(x2, y2)表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将选中的子矩阵中的每个元素的值加上c。 请你将进行完所有操作后的矩阵输出。 输入格式 第一行包含整数n,m, 阅读全文
posted @ 2021-10-04 15:46 empty_thought 阅读(130) 评论(0) 推荐(0)
摘要:仿照一维树状数组的搭建可搭建二维树状数组,在二维树状数组的基础上再搭建二维差分树状数组。 #include<iostream> #define N 100 using namespace std; int n, m; int a[N][N],c[N][N]; int tree[N][N]; int 阅读全文
posted @ 2021-10-04 15:40 empty_thought 阅读(66) 评论(0) 推荐(0)
摘要:搭建一维差分数组可以很方便的进行区间修改和单点查询 #include<iostream> #define N 100 using namespace std; int c[N], a[N],tree[N]; int n; int lowbit(int x) { return x & (-x); } 阅读全文
posted @ 2021-10-04 15:27 empty_thought 阅读(40) 评论(0) 推荐(0)
摘要:分治法的基本思想是将将一个问题分解成若干个规模更小的子问题,然后依据子问题的解得到原问题的解 这个需要递归解决问题,递归解决的子问题一定要与原问题的结构形式保持一直,如果不能一致,需要变成一致 递归函数传递的参数不能是常数 归并算法和快排都是分治 两个n位数的乘积也能分治,将两个n位数从中间分开,高 阅读全文
posted @ 2021-09-25 17:20 empty_thought 阅读(45) 评论(0) 推荐(0)
摘要:讨论基于比较的排序算法 排序算法如果依赖比较,时间复杂度做的不会比nlogn更好,我们可以依据比较的过程画一棵决策树,每进行一次比较都会有两种结果(事先不知道数的大小),将这次结果设为根节点,往下引入两个叶子结点,把未分出大小的接着比较,比较到最后会有n!种结果,因为有n!种排列。而通往每个结果的路 阅读全文
posted @ 2021-09-25 16:52 empty_thought 阅读(422) 评论(0) 推荐(0)
摘要:T(n)=T(n-1)+T(n-2),这个是斐波那契的定义,也说明了计算的方法,在数据不大的情况下,求斐波那契的第n项时间复杂度是O(n),但当n很大时,两个n位数的加法也需要O(n),这样会将时间复杂度升到O(n^2),这个能不能用其他方法降低复杂度,用乘法加速加法,用乘法表示加法 两个n位数相乘 阅读全文
posted @ 2021-09-25 15:51 empty_thought 阅读(546) 评论(0) 推荐(0)
摘要:树状数组是一种特殊的结构,并不是完全的树,而是与一个数组长度相等的另一个数组 设原数组为A[],树状数组为C[] C数组里的元素是A数组若干个元素之和,而求和是有一定规律 用树状数组求和是logN的效率 #include<cstdio> #include<algorithm> #include<io 阅读全文
posted @ 2021-09-15 19:31 empty_thought 阅读(44) 评论(0) 推荐(0)
摘要:将若干对象划分为不相交的集合,在每个集合中选择某个元素代表所在集合 可以用编号最小的元素标记,也可以开辟一个数组a[],a[i]代表元素i所在的集合 并查集常见的运算有merge find 数组操作find是O(1)时间,merge是O(n)时间 树状结构,fa[i]代表i的父节点,判断元素是否位于 阅读全文
posted @ 2021-09-15 16:49 empty_thought 阅读(37) 评论(0) 推荐(0)
摘要:vector函数使用需要头文件vector 一、初始化: vector a(10)先给10个空间,不定义也是合法的 vector a(10,1) 10个空间初始化为1 vector a(b) 用向量b拷贝一个向量a vector a(初指针,末指针) 二、重要函数 a.push_back(item) 阅读全文
posted @ 2021-09-15 14:59 empty_thought 阅读(47) 评论(0) 推荐(0)