
马蹄集试题题解
文章平均质量分 97
记录每周的刷题,并附上高质量题解。
theSerein
路漫漫其修远兮,吾将上下而求索。
展开
-
【马蹄集】—— 百度之星 2023
BD202302 蛋糕划分题目描述 小度准备切一个蛋糕。这个蛋糕的大小为 N × N,蛋糕每个部分的重量并不均匀。小度一共可以切 K 刀,每一刀都是垂直或者水平的,现在小度想知道在切了 K 刀之后,最重的一块蛋糕最轻的重量是多少。原创 2023-11-04 20:08:24 · 2843 阅读 · 8 评论 -
【马蹄集】—— 搜索专题
首先对本题的意思进行一个简化:输入 n 个科学家开始理解第五维度的时间点 S_i 以及其单位时间能得到的理解力 V_i (均为非负整数),那么随着时间的推移,全部科学家的总理解力肯定是不断增加的。一旦总理解力达到了 m ,则认为人类能理解第五维度。但是,现在有一个具有上帝视角的人,他总能找到在这些科学家中具有最高理解力的那位并将其从抹除(则他的理解力也将消失),那么这时候人类还能理解第五维度么?如果能,则输出在这样的前提下人类理解第五维度的最早时间;否则输出 -1。原创 2023-10-29 16:51:12 · 822 阅读 · 0 评论 -
【马蹄集】—— 概率论专题:第二类斯特林数
这是一道经典的盒子放球问题,简化描述如下:n 个不同的球放入r 个不同的盒子,使每个盒子至少有一个球,问总的放置方案。这实际上是一个集合划分问题,为解决此类问题定义第二类斯特林数 ,表示将 n 个不同元素划分成 m 个非空集合(读作“n 子集 m”)。由于该定义是将元素分成若干集合,故又将第二类斯特林数称为斯特林子集数。原创 2023-10-20 20:22:00 · 1037 阅读 · 0 评论 -
【马蹄集】—— 概率论专题:排列组合
箱子中只有一个红球和一个白球,因此第一次抽取时,抽到红球和抽到白球的概率各占一半。接下来对该箱子进行盲抽,如果抽出红色则停止抽奖;如果抽到白色则重新放入一个白球(已被抽出的白球不放回)。这就是说,对该箱子的每一次抽取,其内部总是含有一个红球和一个白球。因此这个模型实际上是一个 p=12p=\frac{1}{2}p=21 的伯努利概型。本题要求的,是停止抽奖时 “中奖球数/摸出总球数” 的数学期望。从理论上说,“抽到奖时摸出的总球数” 可以取到无穷大(即永远抽不到)。因此,本题限制假设最多能抽 M 次。原创 2023-10-16 22:19:29 · 1370 阅读 · 0 评论 -
【马蹄集】—— 数论专题:筛法
注意到在埃式筛法过程中,存在相当一部分重复筛除工作。例如,当确定 2 为质数时,后续会将其倍数:4、6、8、10、12、……全部筛除。而接下来当确定 3 为质数时,后续会将 6、9、12、……全部筛除。这时,所有以 2×3=6 为因数的数,如 6、12、18、24、……等都会被重复纳入筛除进程中,这无疑浪费了相当一部分计算资源。因此,出现了一种更节约时间的筛法——欧拉筛法(线性筛法)。欧拉筛法的整体思路和埃式筛法相似,都是通过将已得到质数的倍数从数据集中筛除来减少判断时间。不过为了让某个数只执行一次筛除原创 2023-09-22 14:30:15 · 710 阅读 · 0 评论 -
【马蹄集】—— 数论专题:质数
MT2206 tax。小码哥要交税,交的税钱是收入 n 的最大因子(该最大因子为不等于 n 的最大因子),但是现在小码哥为了避税,把钱拆成几份(每份至少为 2),使交税最少,输出税钱。格式输入格式:一个正整数 n 表示收入(总钱数)。输出格式:输出一个正整数表示税钱。原创 2023-09-15 14:08:37 · 521 阅读 · 0 评论 -
【马蹄集】—— 数论专题:高精度计算
多位数加法的过程涉及到对各个位的加法运算,因此在处理大数的加法运算时,通常会用一个 int 型数组来存储大数在各个位上的值。例如,数:122333444455555666666,可通过一个足够长的数组进行存储。采取数位与索引大小相对应原创 2023-08-31 19:16:11 · 633 阅读 · 0 评论 -
【马蹄集】—— 数论专题:进位制
本题要求找出尚未在输入数据中出现的最小值(所有数据的最小取值为 0)。但是题目给出的数据为二进制字符串(合法的),因此为了找出最小未出现的数,我们需要先将所有输入的二进制字符串转换为十进制数,并将这些数存放进一个集合 nums 中。接下来,从 0 开始逐步向后枚举整数,一旦存在某个数不在集合 nums 中,就说明这个数是尚未在输入数据中出现的最小数。注意:我们还需对这个数进行格式转换!即将这个数由十进制再转换为二进制字符串(长度需要和输入数据的长度一致)。原创 2023-08-18 18:43:44 · 1213 阅读 · 0 评论 -
【马蹄集】—— 进位制与字符串专题
对于输入的任意新十六进制字符串,如果要找到其对应的十进制数,我们可以通过顺序查找的方式进行求解。即从 0 开始依次枚举该数对应的十六进制数,同时再定义一个计数器 cnt 来记录当前找到的合法的新十六进制数个数,当存在某个十进制数对应的十六进制数与输入的新十六进制数一致时,计数器 cnt 保存的值即为所求。原创 2023-08-13 20:02:23 · 693 阅读 · 0 评论 -
【马蹄集】—— 动态规划专题
这道题本质是求“最长上升子序列”,是动态规划最经典的问题之一。对于需要进行动态规划的题目而言,其核心点在于如何设计转移方程和转移数组。对于上升序列,其中的元素必定满足后者不小于前者,因此我们在求上升子序列时可以从此角度出发,不断从后往前进行寻找(或从前往后)。基于此,可设转移数组 dp[i] 为“以索引 i 结尾的子序列中,其含有的上升序列个数”,则最终的待求答案即为:dp[ ] 数组中的最大值。原创 2023-06-14 15:21:27 · 1235 阅读 · 0 评论 -
【马蹄集】—— 前缀和与差分专题
实际上,题目的要求是找出指定序列中所有“均值不低于指 $t$ 的子序列”个数。一个很直观的想法是,既然你要求序列均值不低于 $t$ ,那我们可以将原序列中的每个数都与 $t$ 做差,这样一来,得到的新序列里一旦存在某串序列之和大于 0,那就说明这段序列的均值是大于 $t$ 的(即符合要求的序列)原创 2023-05-23 17:27:38 · 1443 阅读 · 0 评论 -
【马蹄集】—— 模拟与枚举专题
首先要知道一件事,箭的射程是无限的,对于射出的任意箭,它必定能将一系列高度为等差递减序列的靶子全部射穿。具体做法是,对于输入的高度,我们每次都将当前高度进行下沉,这样最终就能把不同位置的具有连续递减性质的丛数给记录下来。因此,为了简化上述复杂的分情况讨论环节,我们可以用一种更简单的方式进行:将原始数据存储至一维空间,执行“将数据向后移动若干位”后再按二维的方式进行输出。这样的方式显然是可行的。又到了冬季,竹鼠们也要谈恋爱,因为竹鼠们都太胖了,它们的活动范围有限,这里统一规定它们的活动范围为。原创 2023-05-16 17:06:01 · 813 阅读 · 0 评论 -
【马蹄集】—— 哈希表与集合专题
有 N 只虫子,每只虫子有6条腿,每条腿都有长度且长得很奇怪,如下图所示。第 i 只虫子六条腿的长度从某条腿开始依次记为 a_1,a_2,…,a_6 。但是,不同人选择的起始腿不同,记录方向也可能不同(顺时针或逆时针),这就导致记录的序列可能也有所不同。但是,他们所得的六元组序列都代表形状相同的虫子。例如,a_1,a_2,…,a_6 和 a_2,a_3,…,a_6,a_1 就是形状相同的虫子;a_1,a_2,…,a_6 和 $a_6,a_5,…,a_2,a_1 也是形状相同的虫子。原创 2023-05-05 15:27:15 · 634 阅读 · 0 评论 -
【马蹄集】—— 模拟专题
题目的要求很简单,有一个会提两类询问的系统:一个是增加数据,另一个是输出现有数列的中位数。我们的任务是对系统的所有指令给予执行。这是一道很明显的模拟题。基于此,我们可以定义一个数组。每当系统要求增加数据时,可采取 `选择排序` 的方法来执行插入,以维持数组的有序性;每当系统要求输出中位数时,又能根据当前数组的长度来找到其中位数。这是最简单直接的办法,但是其必定超时。因为对于一次插入数据请求而言:选择插入位置和调整数组中的元素位置的时间复杂度均为原创 2023-04-24 22:21:35 · 988 阅读 · 0 评论 -
【马蹄集】—— 堆栈专题
在用栈对目标字符串进行处理时,大家首先想到的肯定都是直接设一个 `stack` 型的栈,接下来扫描输入的字符串,若不为 `)` 就入栈,若为 `)` 就出栈(并开始对此栈进行 pop() 操作,直到遇到 `(` 时停止),接下来对出栈操作获取到的字符串进行处理即可(因为这里获取到的字符串可能会含有 `|` ,这种情况下必须选其中最长的那一串 `a` 串作为最终的结果,并将此字串再次push()进栈内)。原创 2023-04-18 20:06:29 · 1081 阅读 · 0 评论 -
【马蹄集】—— 排序专题
注意到:对于满足匹配条件的两个人而言,其中一人的 A、B 能力之差应与其匹配对象的 A、B 能力之差互反。举个例子,假设某个对象 i 的 A、B 能力分别为: Person[i].A = 24, Person[i].B = 18,则该对象的 A、B 能力之差 Person[i].gap = 24-18 = 6;那他的匹配对象 Person[j] 要满足什么条件呢?很简单,只要 Person[j].gap = -Person[i].gap = -6 即可。原创 2023-04-15 16:10:36 · 1104 阅读 · 0 评论 -
【马蹄集】—— 递归与分治专题
在求子三角形个数时,为了避免漏解,我们应当从某个 “连续” 的属性出发,去一一算出在该情况下的解的个数,然后再进汇总即可。一个很直观的 “属性” 是子三角形的边长(也许第一次做题的你会很难想到,但当你做多了这种类型的题后,你就会慢慢地习得这一技能了)。于是,从这一层面出发,该问题就转变为 “求边长为 1 的三角形个数 + 求边长为 2 的三角形个数 + ……” 。原创 2023-04-14 22:14:12 · 1163 阅读 · 0 评论