随笔分类 - AcWing算法基础课
摘要:图的最短路径问题 详细分解版 1.图的最短路径问题分类 2.单源最短路问题 2.1边权值都是正数情况 2.1.1 朴素Dijstra算法 算法思想:每次从未被确定最短距离的结点中找出距离起点最小值的结点,加入集合s中,并用该结点更新其他未被确定最短路径值得结点路径。直到最终全部节点的最短路径值都计算
阅读全文
摘要:c++ 超大整数除法 高精度除法 解题思路 计算a/b,其中a为大整数,b为普通整数,商为c,余数为r。 根据手算除法的规则,上一步的余数记为r,则本次计算的被除数为t=r*10+被除数的本位数值a[i],商t/b,本步余数为t%b 除法是从最高位开始计算的,所以需要反转reverse一下,才能保持
阅读全文
摘要:c++ 超长整数乘法 高精度乘法 解题思路 参考加法和减法解题思路 乘法不是一位一位的按照手算的方式进行计算,而是用循环用一个数的某一位去乘另外一个数 打卡代码 #include<bits/stdc++.h> using namespace std; vector<int> mul(vector<i
阅读全文
摘要:c++ 超长整数减法 高精度减法 实现思路 和加法类似,设置临时变量记录借位 当对应位数相减得到的结果大于等于0时,该位数字为本身值,否则需要加上借位的10。则 打卡代码 #include<bits/stdc++.h> using namespace std; bool c
阅读全文
摘要:c++ 超长整数加法 高精度加法 实现思路 不能直接使用加法,因为int和long long都已超出最大数据表示范围 数据读入采用string类型,读入后将数据的每一位存储到vector中 vector存储时数字的高位要存在vector的末尾,因为这样如果有进位,可以快速push_back stri
阅读全文
摘要:求一个数的三次方根 实数二分 方法一: 调用库函数pow res=pow(x,1.0/3); 使用这个函数时,当x为负数时,输出为nan,原因是负数的立方根还有复数,而c++不能表示复数 方法二: 二分 double l,r; while(r - l > 1e-8){ double mid = (l
阅读全文
摘要:数的范围——整数二分 题目描述 给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。 对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。 如果数组中不存在该元素,则返回 -1 -1。 输入格式 第一行包含整数 n 和 q,表示数组长度和询问个数。 第二行包含
阅读全文
摘要:逆序对个数求解 题目描述 给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数 n,表示数列的长度。 第二行包含 n 个整数,表示整个数
阅读全文
摘要:归并排序 算法分析 空间效率: 时间效率: 稳定性:稳定 模板 #include<bits/stdc++.h> using namespace std; int n; const int
阅读全文
摘要:快速排序 模板 模板每次选取的枢轴元素为中间的值 //快速排序算法 void quickSort(int a[],int l,int r){ //递归边界判断 if(l>=r) return ; //初始化指针 //这里-1和+1是因为后面代码使用了do-while循环结构 int i=l-1,j=
阅读全文