
学习笔记
文章平均质量分 75
胡牧之.
此人很懒,但还添加了简介
展开
-
C语言实现整型数据、浮点数向字符串String的转换
1.整型向字符串转化static inline std::string i64tostr(long long a){ char buf[32]; snprintf(buf,sizeof(buf),"%lld",a); return std::string(buf);}2.浮点数向字符串转换static inline std::string d64tostr(double a){ char buf[32]; snprintf(buf,sizeof(buf)原创 2022-03-27 11:41:04 · 967 阅读 · 0 评论 -
两类快读写法
较快inline int read(){ re int x=0,f=1;re char c=getchar(); while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar(); return x*f;}极快但不可用此输入字符串和字符char buf[1<<2原创 2022-03-21 16:15:05 · 196 阅读 · 0 评论 -
整除分块小结
文章目录一、∑i=1n⌊ni⌋,∑i=1n⌊ki⌋\sum_{i=1}^n\lfloor {\frac{n}{i}} \rfloor,\sum_{i=1}^n\lfloor {\frac{k}{i}} \rfloor∑i=1n⌊in⌋,∑i=1n⌊ik⌋1.函数分析2.操作(1).如何分块(确定上下界及证明)(2).计算(3).结束条件以及临界分析3.复杂度分析4.模板代码二、∑i=1nA[i]⌊ki⌋\sum_{i=1}^nA[i]\lfloor {\frac{k}{i}} \rfloor∑i=.原创 2021-08-27 17:01:48 · 564 阅读 · 0 评论 -
快速乘模板
文章目录一、介绍1.目的2.原理二、实现代码一、介绍1.目的计算乘法时,可能在结果还未出来时就已经爆掉了,以至于无法正确对结果取模,所以需要用快速乘来把乘法操作进行细分,保证结果取模的正确性。2.原理以5∗105*105∗10为例:将10划分为二进制表达:1001那么计算5*10就可以划分:5∗(23∗1+22∗0+21∗0+20∗1)5*(2^3*1+2^2*0+2^1*0+2^0*1)5∗(23∗1+22∗0+21∗0+20∗1)我们的操作就是把乘法划分为这几个项的相加,过程中进行.原创 2021-08-09 21:36:59 · 250 阅读 · 0 评论 -
高精度模板
文章目录一、高精度加法1.分析2.代码二、高精度减法1.分析2.代码三、高精度与低精度乘法1.分析2.代码四、高精度与低精度除法1.分析2.代码五、高精度乘法1.分析2.代码六、高精度除法一、高精度加法1.分析大整数加法大整数存储:用数组从个位开始存储,方便补位操作,同时最好用vector,方便空间处理和访问大小。操作:从个位开始操作,每一位由加数,被加数和进位所决定,最后对最高位是否有进位进行判断。前导0处理:不考虑前导0则可以直接逆序输出,若考虑则先进行判断,找到第一个非0位,保证结果长.原创 2021-08-05 09:44:10 · 938 阅读 · 0 评论 -
高斯消元·解普通线性方程组·解异或线性方程组
文章目录一、思路·高斯消元解线性方程组二、代码实现三、例题·高斯消元解异或线性方程组一、思路·高斯消元解线性方程组1.枚举每一列,于当前列中找到绝对值最大的一项;2.将该项所处的行与当前首行进行交换;3.将此时第一行的第一个非零元素化为1,对其余元素进行相同处理;4.使用倍加处理,用当前行把下列所有元素消为0;5.重复1操作,此时当前行已被确定,枚举下一列,以当前行的下一行视为首行。若遇到一列中所有元素都为0的情况,我们直接处理下一列,并且不改变首行,经过上述处理,最后一定可以得出系数全.原创 2021-07-23 17:50:40 · 328 阅读 · 0 评论 -
快速幂与矩阵快速幂
文章目录一、快速幂1.原理2.取模写法二、矩阵快速幂1.原理2.代码3.应用——斐波那契数列4.应用场景三、矩阵快速幂的构造1.形如f(n)=f(n-1)+f(n-2)2.形如f(n)=f(n-1)+f(n-3)3.形如f(n)=f(n-1)+f(n-3)+c4.形如f(n)=f(n-1)+f(n-3)+n^35.求前缀和,额外构造s(n)6.求各项平方之和,构造s(n)7.构造二维状态四、矩阵幂求和1.分析2.代码一、快速幂1.原理快速幂用于快速计算 a^b ,时间复杂度 O(log b)是.原创 2021-07-18 10:01:25 · 556 阅读 · 0 评论 -
线性分治——求逆序对数
文章目录前言一、分治思路二、代码前言求逆序对数之前我们在讲树状数组的时候讲过,那个时候我们采用的方法是先对数据进行离散化处理,缩减数据范围,再将数据依次放入数组中,在这个过程中通过计算区间和统计对应逆序对个数;此时我们将采用另一个思路——线性分治。分治的思想我们学习排序的时候接触过一些,比如归并排序,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。一、分治思路计数类题目最重要的原则是不重不漏。在一段线性区间中取一个平衡点,一个逆序对要么位于点的同一侧原创 2021-07-15 08:54:46 · 421 阅读 · 0 评论 -
蓝桥杯——地宫取宝(记忆化搜索)
题目:地宫取宝问题描述:我们的目标是统计到达终点时身上宝物数量恰为k的方法数:1、人物初始位于左上角,终点位于右下角;2、人物仅可以选择向右或者是向下移动;3、每到达一个格子,若该处的宝物价值高于已携带宝物中的最大价值,则可以选择拿取该宝物收入背包。 原因分析思路一、暴力搜索题目本身的数据量不算大,直接通过暴力搜索也可以做,也可以通过一部分数据。但在过程中还是要注意数据范围大小,题目要求对结果取模,这个模也可以说明数据的范围是远大于int的数据范围的,所以还是要使用long lo原创 2021-07-14 14:52:48 · 456 阅读 · 0 评论 -
背包九讲总结
文章目录前言一、01背包(二维分析、一维优化)1.背景2.分析3.代码二、完全背包(与01背包比较)1.背景2.分析3.代码三、多重背包(朴素、二进制优化划分、单调队列优化)1.背景2.分析3.代码四、1.背景2.分析3.代码前言<font color=#999AAA根据y总的视频,总结了一下背包九讲的内容,准备好好搞一下dp问题。一、01背包(二维分析、一维优化)1.背景01背包先给定背包容积大小V,再给定物品数目N,之后根据N的值输入每个物品的体积v[i]跟价值w[i],问背原创 2021-06-20 17:11:43 · 1588 阅读 · 0 评论 -
单调队列模板(滑动窗口)
文章目录例题.滑动窗口一、单调队列特点二、原理1.例子(输出窗口最小值):2.模拟(输出窗口最大值)3.队头何时出队三、代码实现及注释例题.滑动窗口滑动窗口有一个长为 n 的序列 a,以及一个大小为 k 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。一、单调队列特点1.队列内元素值单调,递增或递减;2.队头为窗口内元素的最值,队尾为窗口的尾元素;3.除了队头可以进行出队操作外,队尾同样可以进行出队操作二、原理每次新加入一个元素进行判原创 2021-06-16 19:49:24 · 818 阅读 · 0 评论 -
离散化(结构体、二分索引)
离散化目的:将原来值很大的一组数据更新为一组不改变原来数值之间相对关系同时数值很小的一组数据。此操作的前提为接下来的操作与数值大小无关,仅与相对关系有关。思路:1.先在结构体内设置两个量:val,数值ord,输入顺序再创建一个结构体数组2.对结构体数组对数值大小进行排序,可直接调用函数再将val进行更新;对于数值来说,可能存在重复的值,故不建议直接用元素下标直接代替val的值,可以安排一个cnt,仅当前一个元素的数值与当前元素的值不同时用(++cnt)来更新,否则只有cnt来更新原创 2021-05-18 19:51:41 · 738 阅读 · 0 评论 -
线段树入门
文章目录前言(与树状数组比较)一、原理与构造1.原理2.4N空间的证明3.构造二、单点更新(初始版)三、区间查询(初始版)四、区间更新(绝对修改,相对修改)1.更新的类型2.lazy标志的作用3.pushdown的作用4.区间更新4.区间访问(改进版)前言(与树状数组比较)树状数组,一般用来处理前缀和问题,但我们后来介绍了如何用树状数组来求区间最值,我个人感觉树状数组跟基本线段树的功能已经很接近了,甚至在空间复杂度上更具优势;但(1)树状数组能解决的问题用线段树都能解决,而且思路更加的直接,(2)线原创 2021-05-12 00:22:18 · 478 阅读 · 0 评论 -
树状数组小结
文章目录前言一、树状数组的作用二、二进制拆分三、lowbit的使用四、基本使用1.单点修改(前缀和)2.区间查询(前缀和)3.区间修改(差分数组)4.单点查询(差分数组)5.区间查询+区间修改五、进阶使用1.求逆序对数2.区间求最值3.查询第K大/小的数4.二维树状数组前言对于一个数组,我们常见的操作为修改和查询,那么对于一个长度为N的数组来说,我们查询和修改一个点的时间复杂度为O(1),而对于修改并查询一个区间的复杂度则为O(N),如果对于区间的操作远多于对单点的操作,那么我们就引入了差分数组与前原创 2021-05-04 23:08:42 · 750 阅读 · 0 评论 -
前缀和小结
文章目录一、前缀和的定义与优点二、前缀和与差分数组1.什么是差分数组2.差分数组的作用3.差分数组跟前缀和的联系三、一维前缀和1.静态区间求和2.区间整体修改3.应用四、二维前缀和1.静态矩形区间求和2.矩形区间整体处理3.应用一、前缀和的定义与优点对于 a0,a1, a2, a3, a4, a5, a6, …前缀和 Si = a0 + a1 + a2 + a3 + a4 +…+ ai这种处理不仅不影响我们求出原先数组中的每个元素,还会便利对的区间求和,原先如果要求一段区间的和,必须要对该区间原创 2021-04-10 09:46:34 · 1221 阅读 · 0 评论 -
数据结构——最短路径问题
文章目录前言一、问题分类二、单源最短路径1.无权图(BFS)(1)问题分析(2) 路径记录2.有权图(DiskStra算法)(1)问题分析(2)算法介绍(3)代码实现三、多源最短路径1.问题分析2.枚举(1)思路3.Floyd算法(1)思路分析(2)代码实现前言两个顶点之间的最短路径问题就是求一条路径可以令两顶点沿途各边权值之和最小。一、问题分类对于这个问题,可以分为两种情况:1.单源最短路径:从固定起点出发,求最短路径;2.多源最短路径:求任意两顶点间最短路径。除此以外,在每种情.原创 2021-02-26 22:52:00 · 5740 阅读 · 1 评论 -
21年寒假第一周周练/HDU1010 :Tempter of the Bone骨头的诱惑(奇偶减枝)
题目:Problem Description迷宫是一个大小为N×M的矩形。迷宫里有一扇门。一开始,门是关着的,它会在第T秒打开一小段时间(不到1秒)。因此,小狗必须正好在第T秒到达门口。在每一秒钟里,他都可以移动到上、下、左、右相邻区域。一旦他进入一个区域,这个区域的地面就会开始下沉,并在下一秒消失。他不能在一个区域停留超过一秒钟,也不能进入一个已经访问过的区域。可怜的小狗能活下来吗?请帮帮他。Input输入由多个测试用例组成。每个测试用例的第一行包含三个整数N、M和T(1<N、M<7原创 2021-01-25 15:59:52 · 282 阅读 · 1 评论 -
普通质数筛法
关于质数筛法的讨论文章目录关于质数筛法的讨论前言一、暴力循环1.优点2.关键代码3.缺点二、埃氏筛1.改进2.关键代码3.缺点三.欧拉筛法1.改进2.关键代码总结前言从暴力的直接循环开始,一步步对算法进行优化,一步步简化时间复杂度,并尽可能讨论各种筛法的优劣,以及其中每一步的意义。一、暴力循环1.优点思路直接,容易被像我们这样的新手第一时间想到,一个质数,除了1和它本身以外不再有其他因数,那么想知道一个数是不是质数,干脆直接去看看它有几个因子2.关键代码仅仅提供思路,理解后能灵活运原创 2020-12-15 16:54:53 · 717 阅读 · 0 评论