《算法竞赛进阶指南》
文章平均质量分 87
根据《算法竞赛进阶指南》一书配合ACWing的讲解视频和题解整理的笔记 仅供参考
Curing!
这个作者很懒,什么都没留下…
展开
-
0x00 二分
整数二分模板当区间[l,r]的更新操作是r = mid;l = mid+1时,计算mid时不需要加1;int bsearch_1(int l,int r){ while(l < r){ int mid = l+r>>1; if(check(mid))r = mid; else l = mid+1; } return 1;}当区间[l,r]的更新操作是r = mid-1; l = mid时,计算mid时需要加1;int bsearch_1(int l,原创 2021-08-31 16:09:17 · 100 阅读 · 0 评论 -
0x00 前缀与差分
前缀和:对于一个给定的数列,它的前缀和序列可以通过相加一一进行递推一个部分和,数列A某个下标区间内的数的和可以表示为前缀和相见的方式从而可以以线性的速度算出数组某一部分的和例题 激光炸弹一种新型的激光炸弹,可以摧毁一个边长为 R 的正方形内的所有的目标。现在地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个边长为 R 的正方形的边必须和x,y轴平行。若目标位于爆原创 2021-08-31 15:31:40 · 229 阅读 · 0 评论 -
0x00 递归与递推(下)
例题 奇怪的汉诺塔输入格式没有输入输出格式对于每一个整数n(1≤n≤12),输出一个满足条件的最小移动次数,每个结果占一行。输入样例:没有输入输出样例:参考输出格式...原创 2021-08-31 14:43:05 · 131 阅读 · 0 评论 -
0x00 递归与递推(中)
例题 递归实现排列型枚举题目描述把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。输入格式一个整数n。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。数据范围1≤n≤9输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1解题思路:DFS实现全排列原创 2021-08-31 14:28:52 · 138 阅读 · 0 评论 -
0x00 递归与递推(上)
递归:以“原问题”为起点尝试寻找把状态空间缩小到已知的“问题边界”的路线,再通过该路线反向回溯的遍历方式。递推:以已知的“问题边界”为起点向“原问题”正向推导的扩展方式。使用枚举算法暴力搜索整个状态空间,经常使用到递归算法。例题 递归实现指数型枚举题目描述从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。.原创 2021-08-31 14:11:35 · 74 阅读 · 0 评论 -
0x00 位运算(下)
例题 64位整数乘法题目描述求 a 乘 b 对 p 取模的值。数据范围1≤a,b,p≤10^18样例输入样例:345输出样例:2解题思路:a * b可以看作a + a + … + a 即b个a相加a * 1 = aa * 2 = 2aa * 4 = 4aa * 8 = 8a…a * (2^k) = 2^k * a k的时间复杂度是O(logb)从中挑出组成b的数相加解模板..原创 2021-08-31 13:58:49 · 336 阅读 · 0 评论 -
0x00 位运算(上)
四种操作 :与&或|非~异或xor(c++中异或用^表示)补码:1 + 1的补码 = 0000000000 <—— 做最高位不进位运算1 + 1111111111 = 00000000001的补码 = 1111111111以此类推2的补码 = 1111111110总结某个数x + ? = 00000……00 做最高位不进位运算?即为x的补码? = ~x + 10x3F0x3F满足:..原创 2021-08-31 13:42:38 · 839 阅读 · 0 评论