![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
irrationality
终身学习者
展开
-
string c++花式操作
详见下面的表格: 常用功能基本都在上方了,感兴趣的话,你可以进行尝试 string 类型的花式操作。原创 2022-04-13 18:00:06 · 814 阅读 · 0 评论 -
leetcode基础编程:数组
1. 两数之和难度:简单收藏给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3原创 2022-02-15 13:39:17 · 382 阅读 · 0 评论 -
全国大学生算法竞赛秋季赛习题
Problem A 智慧果题面已知序列 a:a1=1,a2=2,a3=3a_1=1,a_2=2,a_3=3a1=1,a2=2,a3=3ai=ai−1ai−2ai−3+ai−1+ai−2+ai−3a_i=a_{i−1}a_{i−2}a_{i−3}+a_{i−1}+a_{i−2}+a_{i−3}ai=ai−1ai−2ai−3+ai−1+ai−2+ai−3求 a1000a_{1000}a1000 对 100000 取模的值。题解暴力计算每一项对100000取模的值即可。暴力计算原创 2021-10-24 16:22:27 · 1218 阅读 · 1 评论 -
题目 1排位 2训练 3构造数组
排位有 n 个人排成了一队,小明就在其中。他不知道自己的确切排位,但是他能确定的是,排在他前面的人不少于 a 个,排在他后面的人不超过 b 个。请问,对于他的具体排位,一共有多少种可能性?输入格式第一行包含整数 T,表示共有 T 组数据。每组数据占一行,包含三个整数 n,a,b。输出格式每组数据输出一行结果,一个整数,表示小明具体排位的可能数量。数据范围本题共两个测试点。小测试点,如样例所示。大测试点满足:1≤T≤50,0≤a,b<n≤100。输入样例:23 1 15原创 2021-10-23 21:13:15 · 481 阅读 · 2 评论 -
动态规划(三)学习笔记
计数问题设置一个count函数,同时利用前缀和思想分情况讨论切矩形,应该如何划分?讨论,把所有横向的小方格办完,然后再放竖着的那我们看这个状态该怎么转移呢?优化:状态压缩的一个思路不希望有一个直接父结点 ,每个人最大的高兴度是多少?不连通,那么直接dp就可以搞从子树往上一次向上找滑雪游戏从高处向低处滑雪...原创 2021-10-23 11:10:35 · 156 阅读 · 1 评论 -
动态规划习题课
注意这个二分,需要L+R+1因为l=mid把所有方案的操作次数列举一下原创 2021-10-22 20:43:46 · 156 阅读 · 1 评论 -
动态规划(二)学习笔记
数字三角形dp偏数学,搜索和图论偏代码dp其实你可以这样看:就是要逐步分解,然后去掉一写约束,然后仔细观察由于边界有一定的限制,那么我们需要额外初始化一些地方为0,0最长上升子序列把每一位记下来,可以记下动态规划的方程最长公共子序列:可断开版本合并相邻的石子,最后的代价是多少注意,dp有一个基本原理,就是水涨船高递归写法——记忆化搜索...原创 2021-10-21 20:34:16 · 101 阅读 · 1 评论 -
动态规划(一)学习笔记
###0-1背包问题f(i-1,j)从i-1中选,总体积不超过j转化思想,利用i-1然后把总容积对应减少,然后来计算。优化成一维完全背包问题同时也可以等价优化成1维度下面我们看多重背包问题多重背包 暴力写法每一组都可以凑出$2^K$是其中能容纳的最大那个综上所示,其实背包问题的重点就在于状态转移方程,把状态转移方程一写,然后,进一步的优化,那么背包问题就不是什么难事。...原创 2021-10-21 19:42:35 · 102 阅读 · 1 评论 -
数学知识(习题课)
异或运算(不进位加法)台阶Nim游戏必胜策略:拆分Nim游戏利用sg定理(后期再把sg定理给大家好好写一下)原创 2021-10-17 19:12:30 · 1316 阅读 · 1 评论 -
数学知识(四)学习笔记
容斥原理从实际意义出发,去理解容斥原理容斥原理来算2,3的倍数一共多少个数,这就很轻松了。先手可以拿成相同,那么就可以了于是就有了Nim游戏SG的简单求解...原创 2021-10-17 11:57:17 · 1257 阅读 · 1 评论 -
数学知识(三)学习笔记
高斯消元然后利用第二行首个变成一,把之后(注意不要消之前的)的所有消成0然后又倒回来消元组合数利用阶乘和快速幂求组合数o(2)优化和o(3)优化,可以略微加速阶乘素数筛法...原创 2021-10-17 10:47:21 · 88 阅读 · 1 评论 -
数学知识补充(裴蜀定理与扩展欧几里得算法)
最大公约数可以在logn的时间范围内求出来,代码很简洁,扩展欧几里得算法的题面公式成立的充要条件就是裴蜀定理利用欧几里得算法进行递归改变很容易我们可以得到一组特解 1 0余数替换法则展开然后合并同类项由于x发生了变化,那么就要对t=x来暂存x,计算y同理可以用yx来做 ,而yx在第11行跟换后有好处,就是递归式可以不引入中间变量t,更加简洁...原创 2021-10-16 18:25:18 · 192 阅读 · 0 评论 -
数学知识(习题课)
综合题,串联了各种知识注意c++里面求正余数的办法,要加上一个a1扩展exgcd的算法,求解同余方程组原创 2021-10-16 17:48:54 · 200 阅读 · 1 评论 -
数学知识(二)学习笔记
欧拉函数1~n中与n互质的数的个数如何在O(n)的时间内求出每个数的欧拉函数?首先,注意欧拉函数与质因子出现过的次数没有关系,只要出现过一次,就要*(1-1/t)讨论如下的两种对立情况 ,那么我们可以得到两种递推关系式另:欧拉定理因此得到简单证明 。欧拉定理的简单推论:费马定理详细介绍可看《离散数学》《算法导论》‘快速幂:这个又要看离散数学了,非常有意思,我利用暑假研究读了一下’...原创 2021-10-14 21:33:05 · 145 阅读 · 2 评论 -
数学知识(一)学习笔记
第一种O(n)从2到n-1遍历着去除优化:利用sqrt;由于sqrt比较慢,继续考虑i*i而i*i<n判断存在溢出风险所以用i<=n/i,推荐做法!!由于从小到大枚举,因此i一定是质因数,不会是合数而且必须是它本身!!筛法求质数没有优化的是把所有的数的倍数统统删掉依次把2的所有倍数,3的所有倍数,依次删除 ,用之前还没有被删掉的数字去筛选后面的,保证了2~p-1都没有p的因数时间复杂度判定(未优化版本)n...原创 2021-10-14 20:25:30 · 134 阅读 · 1 评论 -
搜索与图论(三)学习笔记
首先应该记住算法思路,算法思路好像人的骨骼,代码好像肌肉,骨骼好了,身形不会太差朴素Prim用普利姆算法得到最小生成树加入一个点更新距离;选择一个最近的点,更新距离;陷阱:注意自环需要预处理Kruskal算法染色法判断二分图匈牙利算法匹配与执着追求...原创 2021-10-14 16:22:52 · 113 阅读 · 1 评论 -
搜索与图论(二)学习笔记
你好原创 2021-10-14 15:15:21 · 98 阅读 · 1 评论 -
数据结构习题(一)
单链表实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数; 删除第k 个插入的数后面的数; 在第k 个插入的数后插入一个数。现在要对该链表进行M 次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第 k个插入的数并不是指当前链表的第k 个数。例如操作过程中一共插入了n 个数,则按照插入的时间顺序,这 n个数依次为:第1 个插入的数,第2 个插入的数,…第n 个插入的数。输入格式第一行包含整数M,表示操作次数。接下来M 行,每行包含...原创 2021-10-13 16:31:24 · 112 阅读 · 0 评论 -
搜索与图论(一)学习笔记
深度优先搜索DFS深度优先搜索非常执着,就是要 找穿一条路,然后再走下一条,而不会退到远点,而是一有机会就走向下一条相比之下,bfs就相对稳重,走完一层才走下一层,稳扎稳打。对空间要求比较高,一般用深度优先搜索,而要计算距离,则用广度优先搜索。应用DFS进行全排列,可以得到上图的结果注意:1、恢复现场,st[i]=false;例题 n皇后问题知识点:剪枝正对角线与反对角线之所以不考虑!row[i] 是因为我们是一行一...原创 2021-10-12 20:43:37 · 155 阅读 · 1 评论 -
数据结构(三)学习笔记
1、哈希表开放寻址法开放寻址法注意h数组要开成题干所给的两倍memset是一个字节的,而h是int型的数组,所以可以变成0x3f3f3f3f字符串哈希同时依靠溢出来表示取模一言概括:这个哈希表就是找厕所,号对应厕所,拉链法就是排队,开放寻址法就是有人了就换下一个STL应用string的操作:substr 第一个参数 从哪里开始 第二个参数 :长度 超出或者省略 ...原创 2021-10-12 18:06:29 · 82 阅读 · 1 评论 -
数据结构(二)学习笔记
trie树是一个非常非常简单的数据结构 26个字母,所以是son26并查集思路精巧,代码简短,是常见的面试题目,熟练掌握路径压缩优化原创 2021-10-10 16:45:00 · 89 阅读 · 2 评论 -
数据结构(一)学习笔记
下一个为空:ne[x]=-1栈单调栈与单调队列单调队列经典题 滑动窗口,单独列KMP算法,就是拟合一个next数组,减少回退next数组:next[5]=3双指针就是利用单调性利用idx来索引第k个插入的数字scanf会把空格回车都读进去,但是cin会自动过滤掉单调栈:不匹配,就删除数组元素目标和学习卡片:学习前人的东西,一定要学会了,我们再去创造,这样或许会...原创 2021-10-10 12:33:30 · 89 阅读 · 0 评论 -
基础算法(三)学习笔记
双指针算法 第一类 归并排序 快排也是双指针第二类 维护区间输出abcdefghi//双指针算法最简单的一个应用输出二进制表示二进制中1的个数离散化就是一个映射,要用到pair<int ,int > PII unique sort...原创 2021-10-10 11:06:03 · 78 阅读 · 0 评论 -
基础算法(二)学习笔记
除法变成*10的减法前缀和的小技巧ios : : sync_with_stdio( false);l消时二维前缀和原创 2021-10-09 17:13:49 · 232 阅读 · 1 评论 -
数位dp学习笔记(更新中:文末有彩蛋)
彩蛋原创 2021-10-05 23:01:00 · 113 阅读 · 0 评论 -
1.6.8天平难题
Description给出房间的宽度r和s个挂坠的重量wi,设计一个尽量宽(但宽度不超过房间宽度r)的天平,挂着所有的挂坠。天平由一些长度为1的木棍组成。木棍的每一端要么挂着一个挂坠,要么挂着另一个木棍。如图所示,设n和m分别是两端挂的总重量,要让天平平衡,必须满足na=mb(力矩相等)例如,如果有3个重量分别为1,1,2的挂坠,有3种平衡的天平,如图所示。挂坠的宽度忽略不计,且不同的子天平可以互相重叠,如图所示,宽度为(1/3)+1+(1/4)。In...原创 2021-10-05 18:24:49 · 212 阅读 · 0 评论 -
移动玩具(bfs)
在一个 4×4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移动到目标状态。输入格式前四行表示玩具的初始状态,每行 4个数字 1 或 0,1 表示方格中放置了玩具,0表示没有放置玩具。接着是一个空行。接下来四行表示玩具的目标状态,每行 4个数字 1 或 0,意义同上。输出格式输出一个整数,表示所需要的最少移动次数。输入样例:111100001原创 2021-10-05 00:05:37 · 457 阅读 · 0 评论 -
24点的午夜迷局
夜幕降临,万物归于沉静。小明抿了一口咖啡,对于他来说,生活才刚刚开始。虽然他也束手无策过,也为荒谬的世界感到无奈,可是她毕竟出现了。尽管是午夜,年轻人的精神依旧格外亢奋。只要破解了这个难题,他就会离真相更进一步。Hello,大家好,欢迎来到24点的午夜迷局。生活忙碌,是否有小伙伴还在加班呢?哈哈,我们真是同病相怜!Description给出4个小于10的正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表原创 2021-10-05 16:49:08 · 572 阅读 · 0 评论 -
奶酪(bfs)
题目描述现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞。我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z=0,奶酪的上表面为z=h。现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在的坐 标。如果两个空洞相切或是相交,则 Jerry 可以从其中一个空洞跑到另一个空洞,特别地,如果一个空洞与下表面相切或是相交,Jerry 则可以从奶酪下表面跑进空洞;如果一个空洞与上表面相切或是相交,Jerry 则.原创 2021-10-05 17:16:43 · 236 阅读 · 0 评论 -
1.6.4 棋盘问题2
数据的第一行包含两个正整数m,n,以一个空格分开,分别代表棋盘的大小,棋盘上有颜色的格子的数量。接下来的n 行,每行三个正整数x,y,c,分别表示坐标为(x,y)的格子有颜色c。其中c=1 代表黄色,c=0 代表红色。相邻两个数之间用一个空格隔开。棋盘左上角的坐标为(1, 1),右下角的坐标为(m, m)。棋盘上其余的格子都是无色。保证棋盘的左上角,也就是(1,1)一定是有颜色的。输出格式:输出一行,一个整数,表示花费的金币的最小值,如果无法到达,输出-1。输入输出样例输入样例#1:原创 2021-10-05 17:18:47 · 319 阅读 · 0 评论 -
1.6.3 棋盘问题1
Description在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列。请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。每组数据的第一行是两个正整数,n,k用一个空格隔开,表示了将在一个n∗n的矩阵内描述棋盘,以及摆放棋子的数目。当为−1−1时表示输入结束。随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白..原创 2021-10-05 17:19:18 · 123 阅读 · 0 评论 -
n-皇后问题
n−皇后问题是指将 n 个皇后放在 n×n的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。现在给定整数 n,请你输出所有的满足条件的棋子摆法。输入格式共一行,包含整数 n。输出格式每个解决方案占 n行,每行输出一个长度为 n的字符串,用来表示完整的棋盘状态。其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。每个方案输出完成后,输出一个空行。注意:行末不能有多余空格。输出方案的顺序任意,只要不重复且原创 2021-10-04 18:29:53 · 151 阅读 · 0 评论 -
1.6.2 奇怪的电梯(BFS)
Description有一天uncle-lu做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且i层楼上有一个数字。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3,3,1,2,5代表了,从1楼开始。在1楼,按“上”可以到4楼,按“下”是不起作用的,因为没有−2楼。那么,从A楼到B楼至少要按几次按钮呢?Input第一行为333个用空格隔开的正整数,表示N,A,B第二行为N个用空格隔开的..原创 2021-10-04 17:46:50 · 663 阅读 · 0 评论 -
1.6.1 抓住那头牛
刚刚讲了bfs,那下面我们就来搞一个bfs的应用同样先复习bfs模板。Description农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N,牛位于点K。农夫有两种移动方式:从XXX移动到X−1或X+1,每次移动花费一分钟。 从XXX移动到2∗X,每次移动花费一分钟。假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?Input第一行为两个整数,分别为N和K。Output原创 2021-10-04 17:03:58 · 334 阅读 · 0 评论 -
走迷宫(BFS板子题)
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1)处和 (n,m) 处的数字为 0,且一定至少存在一条通路。输入格式第一行包含两个整数 n和 m。接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。输出原创 2021-10-04 16:05:46 · 369 阅读 · 0 评论 -
区间和(离散化)
假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。现在,我们首先进行 n次操作,每次操作将某一位置 x 上的数加 c。接下来,进行 m次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r]之间的所有数的和。输入格式第一行包含两个整数 n和 m。接下来 n行,每行包含两个整数 x 和 c。再接下来 m行,每行包含两个整数 l 和 r。输出格式共 m行,每行输出一个询问中所求的区间内数字和。数据范围−10^9≤x≤10^9,1≤n,m≤10^5,原创 2021-10-04 15:49:13 · 390 阅读 · 0 评论 -
判断子序列(双指针)一图搞定
给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。请你判断 a序列是否为 b序列的子序列。子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5}是序列 {a1,a2,a3,a4,a5}的一个子序列。输入格式第一行包含两个整数 n,m。第二行包含 n个整数,表示 a1,a2,…,an。第三行包含 m个整数,表示 b1,b2,…,bm。输出格式如果 a序列是 b序列的子序列,输出一行 Yes。否则,输出 N原创 2021-10-04 15:44:44 · 138 阅读 · 0 评论 -
数组元素的目标和 (继续探讨双指针)
给定两个升序排序的有序数组 A和 B,以及一个目标值 x。数组下标从 0开始。请你求出满足 A[i]+B[j]=x的数对 (i,j)。数据保证有唯一解。输入格式第一行包含三个整数 n,m,x,分别表示 A 的长度,B 的长度以及目标值 x。第二行包含 n个整数,表示数组 A。第三行包含 m个整数,表示数组 B。输出格式共一行,包含两个整数 i和 j。数据范围数组长度不超过 105。同一数组内元素各不相同。1≤数组元素≤109输入样例:4 5 6...原创 2021-10-04 15:44:58 · 223 阅读 · 0 评论 -
最长连续不重复子序列(一图理解双指针)
给定一个长度为 n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。输入格式第一行包含整数 n。第二行包含 n个整数(均在 0∼105范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。数据范围1≤n≤105输入样例:51 2 2 3 5输出样例:3#include <iostream>using namespace std;const int N = 100010.原创 2021-10-04 15:45:10 · 135 阅读 · 0 评论 -
差分矩阵 (板子题)
输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2)表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上 c。请你将进行完所有操作后的矩阵输出。输入格式第一行包含整数 n,m,q。接下来 n行,每行包含 m个整数,表示整数矩阵。接下来 q行,每行包含 5 个整数 x1,y1,x2,y2,c,表示一个操作。输出格式共 n行,每行 m 个整数,表示所有操原创 2021-10-04 15:45:25 · 122 阅读 · 0 评论