
题解
文章平均质量分 81
允彦
这个作者很懒,什么都没留下…
展开
-
洛谷 P3953 逛公园
原题链接题目描述策策同学特别喜欢逛公园。公园可以看成一张NN个点MM条边构成的有向图,且没有 自环和重边。其中11号点是公园的入口,NN号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间。策策每天都会去逛公园,他总是从11号点进去,从NN号点出来。策策喜欢新鲜的事物,它不希望有两天逛公园的路线完全一样,同时策策还是一个 特别热爱学习的好孩子,它不希望每天在逛公园这件事上花费太多的时间。如果11号点 到NN号点的最短路长为dd,那么...原创 2021-11-01 18:51:50 · 356 阅读 · 0 评论 -
C++ ST表
RMQ 问题:RMQ(Range Minimum/Maximum Query)问题是指:对于长度为 n 的数列 A,回答若干询问 RMQ (区间 [ l,r ] ),返回数列A中下标在 l, r里的最小/大值,也就是说,RMQ 问题是指求区间最值的问题。ST 表 st 表和线段树常被用来解决 RMQ 问题,两个各有优缺点:st 表运行效率高,但不能修改;线段树运行效率相对较慢,但支持修改操作。 st 表的合并复杂度为 O(1...原创 2021-10-13 18:54:52 · 1913 阅读 · 0 评论 -
C++ 线段树
线段树基本常识线段树是一种二叉搜索树(即每个节点最多有两颗子树),与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 如下图,就是一颗 [1,10] 的线段树的分解过程: 由图可得出一个结论,线段树的最大深度不超过,且每一颗线段树需要 4*n 的辅助空间,如果没有开到 4*n ,那就完美 RE 了!!!线段树的的存储 线段树采用的是堆式储存法,即编号为 k 的节点的做儿子为 k...原创 2021-10-12 10:24:06 · 3785 阅读 · 1 评论 -
YbtOJ 击毁战车
前置知识: 无题目描述:解题思路:看到题目的那一瞬间,我脑海中曾闪现出一个想法——暴力! 然而,暴力肯定过不了,然后,我就去了趟卫生间,于是,便有了以下这个做法: 由于战车的速度有大有小,我们不能保证每次选择摧毁的战车是最优的。但知道距离 0 的位置,还知道速度,毫无疑问,可以求出战车到达 d 所需要的时间,而炮弹发射的间隔已知,可以根据贪心策略,每次选择距离 d 最近的战车摧毁(即:时间差最小的)。AC...原创 2021-10-10 15:18:54 · 248 阅读 · 0 评论 -
YbtOJ 序列破解(最小生成树)
前置知识: 最小生成树,前缀和题目描述:解题思路: 又是熟悉的区间判断问题,对于这一类的问题,可以尝试考虑前缀和。 询问给定的区间就等同于提供了前缀和的差值,记录第 i 个数的前缀和为 sum[i] ,即区间 [l,r] 的和可以转化为 sum[r] - sum[l-1] 。 题目给出的任务是解出所有未知数的值。达到这个目的只需要判断是否每一个单独的区间都可以通过前缀和相减的方式得到,而题目要求得到代价和的...原创 2021-08-18 15:55:50 · 329 阅读 · 0 评论 -
C++ 最小生成树
前置知识:连通图:在无向图中,若任意两个顶点 u 与 v 都有路径相通,则称该无向图为连通图。强连通图:在有向图中,若任意两个顶点 u 与v 都有路径相通,则称该有向图为强连通图。连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的 n-1 条边。一颗有n个顶...原创 2021-08-17 16:24:37 · 2338 阅读 · 2 评论 -
YbtOJ 数列询问(并查集 )
目录:前置知识题目描述解题思路AC 代码前置知识: 并查集,前缀和题目描述:解题思路: 题意让我们判断小红的话在第几句出现了错误,如果直接 BF 的话肯定会爆(你问我为什么,因为我试过··· ···),那就要考虑优化,既然是一个连续的区间,那就可以声明一个前缀和数组 sum 来优化算法,既然有了前缀和,那么是不是可以用并查集来维护 - k (mod p)关系?是的,这道题目用并查集恰到好处。那么接下来就该考虑并查集的内部程...原创 2021-08-16 21:11:05 · 342 阅读 · 0 评论 -
YbtOJ 删数问题(区间 DP )
前置知识: 区间 DP ,动态规划题目描述:解题思路: 首先,这道题如果用搜索的话,是肯定会爆的,所以,需要用到动态规划。(搜索的代码这理解不展示了,有兴趣的 OIers 可以尝试一下。 给大家分享给两种动态规划的解题方法: 一、区间 DP 设:f[i][j] 表示按规则消去数列 a[l...r] 得到的最大值。 删去第 i 个数得到的最大值为 a[i] ,删除a[i.....原创 2021-08-15 21:49:55 · 446 阅读 · 2 评论 -
洛谷 P1541 乌龟棋
原题传送门:乌龟棋前置知识:动态规划(DP),递归,枚举、暴力题目大意: 一个长为 n 的棋盘,每走到一个格点,就能获得相应的的得分,开局自动获得第一个格点的得分,有 m 张可以前进的卡片,每场卡片可以前进 k (1 ≤ k ≤ 4) 个格子,每张卡片只能使用一次,问从第一个格点到第 n 个格点最大的得分。解题思路: 读一遍题目,你会发现这道题有点像深度优先搜索,也就是暴力,只需要在过程中声明一个sum 数组记录每种牌的数量...原创 2021-08-15 15:16:50 · 285 阅读 · 1 评论 -
C++ 区间 DP
区间DP 简介: 正所谓区间 DP ,就是在区间上进行 DP 。区间 DP 以区间的长度划分阶段,记录两个端点的坐标,通过合并小区间的最优解来求出大区间的最优解。 在一般的 区间 DP 题目中,区间 DP 的转移依赖于枚举分割点,由此,一般的区间 DP 的时间复杂度为 O() 。一维区间 DP: 一维区间 DP 又被称为普通的区间 DP 。顾名思义,就是在一维的数组上进行区间 DP。其中,最典型的例子就是 石子合并。题目大意...原创 2021-08-14 20:40:23 · 1837 阅读 · 5 评论 -
YbtOJ 躲避拥挤(并查集)
目录:前置知识并查集(路径压缩),快速排序(sort),结构体题目描述样例与数据范围解题思路前置知识:并查集(路径压缩),快速排序(sort),结构体题目描述:样例与数据范围:解题思路: 在并查集的专题里,当然是用并查集啦! 刚开始的时候,小编还以为是用搜索的(你看这个题,他多像搜索啊),再读一读题目,n 个点,m 条边,这很明显是个图论题啊(废话,并查集不就是图论...原创 2021-08-13 21:46:52 · 586 阅读 · 3 评论 -
C++ 并查集算法
并查集简介并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中。其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述。...原创 2021-08-13 13:37:56 · 4880 阅读 · 6 评论 -
C++ AC自动机算法
目录:AC自动机简介如何构造 AC自动机算法实现1、建树 2、预处理失配指针 nex: 3、匹配AC自动机例题推荐AC自动机简介: 正所谓 AC自动机,就是能自动 AC 的算法。AC自动机全称:Aho-Corasick automaton,该算法于1975年产生于贝尔实验室,是著名的多模匹配算法。 实际上,AC自动机就是在 Trie 树上实现KMP,来达到完成多模式串匹配的效...原创 2021-08-12 19:08:15 · 2050 阅读 · 2 评论 -
C++ Trie树算法
什么是Trie树:又称单词查找树,字典树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。至于Trie树长什么样子呢?...原创 2021-08-12 12:59:06 · 1419 阅读 · 3 评论 -
C++ KMP算法
目录:KMP的起源BF算法KMP算法模板题推荐KMP的起源: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(KMP就是取三个人名字的首字母作为该算法的名字)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。 简而言之,就是三位信息界的Orz受够了暴力这种低效率的算法,共同研究了KMP这种优化算法,当然,K...原创 2021-08-11 17:17:18 · 464 阅读 · 2 评论 -
洛谷 P2809 hzwer爱折纸
hzwer爱折纸解题思路:拿过题来,映入眼帘的就是本题良心的数据范围:1≤n≤15。可以确定,暴力搜索加上一些奇奇怪怪的特判就可以解决。但如何实现呢?不难想到深度优先搜索,边界条件就是当现在的纸条序列长度len等于理想纸条序列的长度m时。当然,需要把理想序列的倒序也判断了。最后就是实现纸条翻折的操作,很简单,这里就不详细讲解了(下面的代码中有注释)。建议每次搜索时把目标序列出入函数中否则会很麻烦(亲身体验)代码实现:#include<iostr...原创 2021-08-06 13:00:19 · 245 阅读 · 1 评论 -
YbtOJ 分割矩阵(二分+前缀和)
小编有在洛谷找到一样的题目:Brownie Slicing G目录:前缀知识:题目要求:解题思路:直接上代码:前缀知识:本题解需要大家熟练掌握前缀和和二分算法的相关知识题目要求: 把n*m的矩阵分成a*b块,求最小价值块的价值最大。解题思路:最大化最小点权之和,显然考虑二分答案。考虑二分一个值x,如何判断x是否能作为答案,也就是判断x是否能作为所有点的点权之和最小的一块小子矩阵的点权之和。等价于其他的所有小子矩阵的...原创 2021-08-09 20:34:24 · 258 阅读 · 4 评论