我们无法预估某个瞬间的价值,直到它成为回忆
08 2019 档案
摘要:在kmp算法中,最重要的、算法的核心就是next数组,那么next数组到底表示的是什么首先定义一个概念,next[i]表示字符串中以 i 结尾的非前缀字串与该字符串的前缀能匹配的最大长度即 s[1 ~ j] = ...
阅读全文
摘要:题目链接题目含义:给定一个字符串,问该字符串最多是由它的一个字串复制几次而成的思路:KMP的next数组求循环节,求出最小的循环节,如果字符串长度是循环节的整数倍,说明该字符串复制 len / next[len]...
阅读全文
摘要:题目链接 题目含义:求最少添加几个字符使得原字符串构成一个多于一个循环节的循环思路:KMP的next数组记录的是后缀和前缀里面最长公共字符串,所以next[len]记录的就是整个字符串的最长公共前缀后缀,字符串的...
阅读全文
摘要:题目链接题目含义:给定三个数字n ,l, r,表示有一个长度为 n 的序列,序列中每个数字都在 l 到 r 之间,问有多少种方案组合是的整个序列的和是 3 的整数倍思路:用一个数组 dp[i][0]表示序列中的前...
阅读全文
摘要:题目链接题目含义:给定两个整数序列,a 和 b ,从 a 序列中找 b 序列第一次出现的位置,如果存在输出第一次出现的位置,若不存在输出-1思路:将两个序列抽象成字符串的话,就是一个查找子串的问题,直接用KMP即...
阅读全文
摘要:首先分享一篇很不错的blog博客链接在tarjan求强连通分量时,有一个dfn数组和一个low数组,分别记录了dfs遍历树的次序,和通过不在搜索序列上的边能到达的最小的dfn的值,如果对于一个点 a 和它的子节点...
阅读全文
摘要:https://www.cnblogs.com/jason2003/p/10552476.html
阅读全文
摘要:题目链接题目大意有一个信息要通知给所有人,同一个强连通分量内的人互相传递没有消耗,对于每一对给出的a b c表示a 传递给 b 消耗为 c,问把消息传递给所有人的最小消耗(有重边)思路求图中的强连通分量,缩点,重...
阅读全文
摘要:题目链接题目大意一个有向图,问最少添加几个点能使整个图成为一个强连通图思路tarjan求强连通分量,缩点,如果只有一个强连通分量,说明整个图本身就是一个强连通图,如果有多个强连通分量,求每一个强连通分量的入度和出...
阅读全文
摘要:题目链接题目大意:通知人需要一定的电话费,通知可以传递,给出m组关系,每组一个a一个b,表示a会打电话给b,问最少要通知多少个人,并且求最少的电话费思路:首先同tarjan求所有的强连通分量,然后缩点,找对应的强...
阅读全文
摘要:树状数组就是形如上图的一种数据结构单点查询lowbit运算设计的很巧妙int lowbit(int x){ return x & -x;}可以求出一个数的二进制表示中最低位的1和后面的0组成的数字例如:lowbi...
阅读全文
摘要:题目链接题目大意:有 n 头牛,m 个关系,每个关系对应一个a 和 b ,代表 a 喜欢 b ,如果 a 喜欢 b ,b 喜欢 c ,那么 a 也喜欢 c ,(关系可传递),但是 a 喜欢 b 不代表 b 喜欢 ...
阅读全文
摘要:题目链接题目描述:为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N#include #include #include using namespace std;const int maxn ...
阅读全文
摘要:bellman_ford链接spfa是将bellman_ford用队列优化,在随机图上时间复杂度可达到O(N * k)(k是常数)相较于bellman_ford,spfa首先将起点入队列,然后每次从队列取出一个点...
阅读全文
摘要:思路很简单,用一个数组dist[i][2]表示从1到 i 的最短和次短路,如果通过某一个点能更新最短路,就更新最短路,最短路既然被更新的说明已经不是最短路了,就把它放到次短路的位置,如果最短路不能别更新,说明它不...
阅读全文
摘要:题目链接题目大意:有若干糖果,n个人,m个条件,每个条件有一行,a,b,c,表示 a 认为 b 的糖果不能比 a 多的多余 c 个,即 b - a a的边,权值为c,(不能确定是否是双向的,因此当作单向考虑),...
阅读全文
摘要:题目链接题目描述:给一个二进制数字串,设它的十进制表示为 n ,问 1 到 n - 1有多少个 4 的整数次幂特别傻吊的一个题,模拟进制也可以写,但是模拟进制太low了,换一个思路首先,如果一个数的二进制是 10...
阅读全文
摘要:知道了欧拉函数的计算公式以后,可以看出事实上是将数字的质因子分解出来求解,可以通过埃式筛的过程,每筛出一个素数,就将其所有倍数根据欧拉函数的计算式进行一次计算,在初始化的时候,a[n] = n,如果在循环过程中遇...
阅读全文
摘要:题目链接描述 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小...
阅读全文
摘要:题目链接思路:用一个二维数组dp[i, j]表示中序遍历中从 i 到 j 的区间组成的子树的集合,dp[i, j]的值表示这些子树中得分的最大值,转移方程很简单,dp[i, j] = max(dp[i, j], ...
阅读全文
摘要:一开始一直wa,没搞明白为啥,后来知道了首先,num计算的是某一个商的个数,但是 k / (k / l)计算的是小于等于该商的个数,需要减去前面的其次,最后可能num的个数并没有达到,也就是说有一部分数字也能得...
阅读全文
摘要:高精度取模:a % b = a - (int)(a / b) * b;整除分块:在计算形如 (int) (a / i) i 从1 变化到 n 的和的时候,途中有好多值是相同的,没必要重复计算,因此我们可以求出来其...
阅读全文
摘要:题目链接题目大意:n 头牛两两之间比拼了 m 次,每次都有胜出和失败的,问根据给出的信息能确定几头牛的排名首先设 d[i][j] = 1表示 i 和 j 的比拼中 i 胜出,j 失败,d[j][i] = -1表示...
阅读全文
摘要:题目链接题目描述:求一个二维矩阵a[ ][ ] = { {1, 1} {1, 0}} n次幂后的a[1][2],直接矩阵快速幂即可矩阵快速幂和普通的快速幂相似,只需要将普通的快速幂中的乘法改成矩阵乘法即可快速幂模...
阅读全文
摘要:在进行超高次幂取模运算时,通过欧拉降幂公式结合快速幂快速乘可以很好的减少运算例题直接套公式即可加上快速幂即可#include #include #include #define endl "\n"using na...
阅读全文
摘要:题目链接题表是中文,不再进行题目描述首先分析问题,两只青蛙落到同一位置的问题可以抽象成两只青蛙从起始位置跳,跳出 L 后从头开始(相当于取模运算),也就是说问题就可以理解成两只青蛙从不同位置开始跳了 step 步...
阅读全文
摘要:知道公式就好办了,直接公式转换完成后快速幂取模就可以了#include #include using namespace std;typedef long long ll;ll gcd(ll a, ll b){ ...
阅读全文
摘要:对于一个数字 n,欧拉函数求解的是 1 到 n - 1中与它互质的数字的个数首先根据欧拉函数的计算式(其中p1 p2 pn是 n 的质因子)因此可以通过分解质因子来求解在分解质因子的过程中,如果遇到一个质因子就计...
阅读全文
摘要:题目链接题意:求区间 L, R 内的相邻的最接近的素数和相邻的最远的素数,区间的端点很大,但是区间长度不大,输出最接近的一对素数和最远的一对相邻素数区间筛即可,第一次接触区间筛,所以wa了好多次区间筛是埃式筛的一...
阅读全文
摘要:题目链接题目描述是中文,不再多说本题目主要是采用带权并查集的方法去记录权值,用三个数组实现root 数组保存根节点size 数组保存当前根节点的最大长度d 数组保存当前位置到根节点的距离在查找的 a 到 b 的时...
阅读全文
摘要:描述小Hi的学校总共有N名学生,编号1-N。学校刚刚进行了一场全校的古诗文水平测验。 学校没有公布测验的成绩,所以小Hi只能得到一些小道消息,例如X号同学的分数比Y号同学的分数高S分。 小Hi想知道利用这些消...
阅读全文
摘要:题目链接题意:给两个字符串 A , B ,长度 A > B,B 是 A 的子串,问最多删除多少个字符 B 依然是 A 的子串(子串定义不同,本题子串指的是例如 test 的子串有 test , tes , te...
阅读全文
摘要:题目链接题目是中文,不再写题目描述。这个题主要说一个思路自上而下进行操作的时候,如果遇到操作1,表示将后续的两个生物列为同一类,矛盾的条件是后面的两个生物 a , b 存在捕食关系,也就是说如果 a 捕食 b ...
阅读全文
摘要:题目链接哥德巴赫猜想:任何一个大于2的偶数能拆成两个素数之和正好可以用在本题(题目描述中说的任何一个大于3的数能拆分乘两个素数和是错误的,举个例子,11,如果想拆分成两个数的和必须是一个奇数一个偶数,偶数素数只有...
阅读全文
摘要:坐标离散化是一种常见的技巧,对于一些数据量特别大的题目往往有奇效。举个例子,你需要对输入的 n (n #include #include #include using namespace std;int a[11...
阅读全文
摘要:题目链接题目大意:给定一个数字 n ,接下来是 n 个数字,每次操作可以使得任意两个数字都减一,问能否使整个数列变成0思路:求整个数列的和,以及最大值,将最大值与和的一半作比较,如果和的一半小于最大值则输出no,...
阅读全文
摘要:题目链接本题不是讲迪杰斯特拉算法的,而是在该算法基础上用优先队列进行优化首先回顾dijkstra,每次用一个已经更新过的点的最小值去更新周围的点,因此可以用一个优先队列(从小到大顺序)去保存这些已经更新过的,每次...
阅读全文
摘要:题目链接题目描述:有 t 组测试数据,每组一个 n ,求前 n 个数的倒数和(1 #include #include using namespace std;const int maxn = 1e5 + 10;t...
阅读全文
摘要:经过这个题目对数位DP有了一个新的理解,对于本题而言,求1 ~ n中含 49 的数字个数,比如求解1 ~ 581,数位DP是可以这样来理解的,首先将数字581拆分,三位数分别是5、8、1,也就是说百位不大于5,十...
阅读全文
摘要:题目链接题目描述:给定 n 个人,没人一个欢乐值,参加派对的总欢乐值等于所有参与的人的欢乐值之和,接下来输入多组数,a,b表示b 是 a 的上司,没有人想和自己的直系上司共同参与派对,求最大欢乐值树形dp入门题目...
阅读全文
摘要:题目链接中文题,题目描述不再多说,直接说思路。首先是状态转移,用dp[ i ][ j ]表示第 i 时刻在第 j 位置能接到的最大馅饼数目,状态来源有三上一时刻左边位置转移过来 上一时刻右边位置转移过来 上一时刻...
阅读全文
摘要:题目链接完全背包问题,没啥好说的,直接套板子,但是有一点我没注意到,wa了好久,简直被自己蠢哭了状态转移方程中,关于物品挑选的件数,循环的上限是物品的总数量和当前的钱能买的数量的最小值而且完全背包的转移方程是这样...
阅读全文
摘要:题目链接题目描述:N 个格子染色,共有三种颜色,要求相邻的颜色不能一样,第一个和最后一个颜色不能一样,问有多少种染法分析:如果没有第一个和最后一个颜色不一样的要求的话,对于第 n 个格子染色,应该等于 dp[n ...
阅读全文