
算法
算法好蓝,我好难
这个作者很懒,什么都没留下…
展开
-
树上问题——树的直径
求树的直径通常有两种方法,一种是通过两次搜索(bfs和dfs均可),另一种就是通过树形dp来求了。首先递归到叶结点,然后再由叶结点连接父节点,更新。树的直径就是树中所有最短路经距离的最大值。为初始点用dfs找到离初始点最远的点。开始,用dfs找到离初始点最远的点。数组表示离点i次远的点的距离)。数组表示离点i最远的点的距离,最大的值,该值即为树的直径。原创 2022-09-05 17:01:34 · 360 阅读 · 0 评论 -
字符串算法——manacher(马拉车)1/10
最长回文子串马拉车manacher字符串原创 2022-08-16 23:31:11 · 493 阅读 · 0 评论 -
算法——bfs(广度优先搜索)
简介宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。bfs最经典的问题就是迷宫问题,最短路问题。给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上原创 2021-10-13 17:41:01 · 1344 阅读 · 0 评论 -
算法——背包问题
01背包问题有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入原创 2021-08-21 01:12:27 · 1310 阅读 · 0 评论 -
算法——威佐夫博弈
------------------------------------------小游戏---------------------------------------描述富婆和大力去西天取经的路上遇见了两堆石子,数量任意,可以不同。他们觉得旅途太无聊于是决定开始玩一场激情的小游戏,游戏开始后由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,(因为富婆极其霸原创 2021-08-17 21:53:57 · 230 阅读 · 0 评论 -
算法——进制转换
---------------------------------------------sky 数---------------------------------------描述AI有一天发现一种奇怪的四位数它的十六进制,十进制,十二进制的数字之和是相同的,这样的数就被称为sky数。例如2992,其四位数字之和为2+9+9+2=22,它的十六进制数为BB0,其各位数字之和也为22,同时它的十二进制数表示1894,其各位数字之和也为22。下面你要对一些sky数进行判断。输入输入多个四位正原创 2021-08-17 21:26:55 · 246 阅读 · 0 评论 -
算法——递归习题
-----------------------------------------------logo----------------------------------------描述川师的ACM里面有很多大佬,其中就包括ACM创世の神宋学姐,相传她在创世时ak了所有的ACM题并且设计了一自己的一个logo已让后代瞻仰。一层的logo如图所示:SSSY二层的logo如图所示:SSSSSYSYSSYYSYYS我们很容易发现logo是通过将阶数为k-1的logo的窗原创 2021-08-16 23:01:57 · 164 阅读 · 5 评论 -
算法——DFS
前言由于DFS没有具体的模板,所以通过具体的题目来了解该算法。---------------------递归实现组合型枚举---------------------------------------从 1∼n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。输入格式两个整数 n,m ,在同一行用空格隔开。输出格式按照从小到大的顺序输出所有方案,每行 1 个。首先,同一行内的数升序排列,相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排原创 2021-08-13 22:31:47 · 182 阅读 · 0 评论 -
算法——前缀和与差分
代码模板前缀和:一维 S[i] = a[1] + a[2] + ... a[i] a[l] + ... + a[r] = S[r] - S[l - 1]二维S[i, j] = 第i行j列格子左上部分所有元素的和以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]差分:一维给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1]原创 2021-08-09 22:03:23 · 89 阅读 · 0 评论 -
算法——高精度运算
算法介绍主要用于处理较大数的加减乘除,阶乘,乘方的运算。由于c/c++的long long int最大范围为-9223372036854775808~+9223372036854775807,当数大于这个范围就要用到高精度运算,即用数组来存储数的每一位,模拟运算的过程来改变数组中的数,以达到正常运算的效果。算法模板高精度加法:// C = A + B, A >= 0, B >= 0vector<int> add(vector<int> &A, vecto原创 2021-08-08 22:19:04 · 171 阅读 · 0 评论 -
排序——归并排序
模板void merge_sort(int q[], int l, int r){ if (l >= r) return; int mid = l + r >> 1; merge_sort(q, l, mid); merge_sort(q, mid + 1, r); int k = 0, i = l, j = mid + 1; while (i <= mid && j <= r) if (q原创 2021-08-07 23:50:03 · 74 阅读 · 0 评论 -
排序-快速排序
题目给定你一个长度为 n 的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 1 2 4 5输出样例:1 2 3 4 5模板#include<iostream>using namespace std;const原创 2021-08-06 23:24:12 · 330 阅读 · 0 评论 -
起床困难综合征(位运算)
链接:https://ac.nowcoder.com/acm/contest/996/E来源:牛客网题目描述21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳。作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争。通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为 drd 的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间。正是由于 drd 的活动,起床困难综合症愈演愈烈,以惊人的速度在世界上传播。为了彻底消灭这种病,at原创 2021-08-06 00:02:06 · 175 阅读 · 0 评论 -
哈士顿图(状压dp)
链接:https://ac.nowcoder.com/acm/contest/996/D来源:牛客网题目描述给定一张 n(n≤20) 个点的带权无向图,点从0 ∼n−1标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。示例1输入40 2 1 32 0 2 11 2 0 13 1 1 0输出4思路a[i][j],中i来表示选择点的情况,0<i<=1<<n(&原创 2021-08-05 22:41:38 · 105 阅读 · 0 评论 -
算法——快速幂
题目链接:https://ac.nowcoder.com/acm/contest/996/A来源:牛客网求 a 的 b 次方对 p 取模的值,其中 0 <=a,b,p <=10^9 0≤a,b,p≤10 ^9.分析:该题如果用正常方法来算肯定会超时,这时我们可以用我们的天降猛男——快速幂来解决这个问题。快速幂的简单原理例如:2500对4399取模,可以转化为4250对4399取模,同理,以此类推,8125%4399…………,当指数为奇数时,我们可以看成41*4124%4399原创 2021-08-04 23:20:13 · 197 阅读 · 0 评论