【字符串处理、枚举T10】肥宅快乐串
本题的主要思路是以 "fattyhappy" 为模板,对字符串进行模板匹配。 我们可以从原字符串的每一个字符开始,统计接下来 10 个数字与 "fattyhappy" 的不同字符数,并根据不同的字符数进行对应的操作。我们记不同字符数为 diff。 1.diff >= 3 该情况下无论如何交换都至少会有一个字符与模板字符串不同。 故当 diff >=…
【字符串处理、枚举T09】【DFS 深度优先搜索】解谜游戏
题目分析 本题最优解必然满足所有按键最多只按下过一次,因为多次按压会抵消之前按压的效果; 本题的最优解与按键顺序无关,因为所有灯的亮灭与按键是叠加关系,与先后顺序无关。 思路分享 本题是一道典型的枚举题,但如果我们对所有位置都进行遍历,我们最多需要考虑216*16种情况,这显然不满足题目要求,因此我们需要对算法进行优化。 经过观察,我们不难发现:当…
【字符串处理、枚举T08】【Vector方法】发言统计
本题有很多做法,最常见的是使用字符串数组来存储的方法。这里我想使用一种新的方法,同时向大家介绍一下【Vector】的使用。 什么是Vector? vector是【C++】中一个多功能的,能够操作多种数据结构和算法的模板类和函数库。我们可以将它理解为一个能够存放任意类型的动态数组,能够增加和压缩数据。 Vector的基本使用 Vector头文件:#i…
【感受算法魅力T05】北湖深坑
思路分享 对于本题,某一横坐标处存在积水的条件是该点位于两个比他更高的坐标之间,且该坐标处的积水高度等于其两侧的第二高的高度与该点高度之差。 由此可见,我们只需要从左至右将所有点的积水高度相加即可。 解题步骤 要确定某一点是“制高点”还是“积水点”或其他点,我们需要知道该点两侧的高度信息。 我们可以声明两个数组,分别用于记录某一点(含该点)左侧以及…
【感受算法魅力T04】【可视化简单易懂】北湖挖坑
思路分享 本题中,我们需要让挖坑的次数最少,因此我们需要统计出不同高度层可以连续挖掘的区块个数。 这是一个正确的思路,但是如果我们根据不同高度层来遍历,在庞大的数据体量下必然会有TLE的风险,因此我们需要对这个算法进行优化。 注意到,当我们从左侧向右侧进行遍历时,我们可以根据高度的变化来计算需要挖掘的次数: 1. 当高度不变或上升时,我们…
【感受算法魅力T03】达拉崩吧的酒宴
思路分享 对于一只小白鼠,喝完酒后只会有【死 / 活】两种情况,这与二进制中的01相似。在本道题目中,我们同样可以用二进制来表示酒桶。每一只小鼠喝酒桶对应二进制编号中某一位为1的所有酒。我们可以将每一位上小白鼠的存亡用01来表示。最终得到的数便是有毒酒桶对应的二进制编号。 换而言之,我们只需要知道酒桶最多需要几位二进制数来表示,即可得出所需小鼠的数…
【感受算法魅力T02】摘桃子
思路分享 本题需要我们计算出能摘取到的桃子的最大值。解题策略如下: 先摘取昨日剩下的桃子; 其次摘取今天的新桃子。 这个思路其实很容易看懂。我们要让摘得的桃子数量最大化,必然要尽可能不让桃子过期。今日的桃子不摘明天还能摘,但是昨天的桃子不摘明天就摘不了了。 技巧 对于本道题目,我们不需要关注桃子在哪棵树上,只需要关注每天产出的桃子的总数,因此我们在…
【感受算法魅力T01】猜数字看人品
思路分析 本题需要我们判断Tom的回答是否合理。直观地,我们可以根据Tom的回答来确定数轴上的一条线段: 通过Tom的几轮回答,我们可以不断更新它的左右边界,即: 1. 当Tom回答"too low"时,更新左侧边界; 2. 当Tom回答"too high"时,更新右侧边界; 3. 当Tom回答"right on"时,更新目标点。 由此,我们可以轻…
【薪火培训】STM32 UART通信
1. 什么是UART? UART是一种异步串行通信接口,常用于通过串口与外部设备进行通信。它通过发送和接收数据帧来实现数据传输,使用起来相对简单。UART通常包含发送器(Transmitter)和接收器(Receiver),通过两根信号线(传输线)进行双向通信。 2. UART协议内容简介 UART协议将一长串数据切成很多固定长度的小段,分别发送。…